package mediactrl import ( "91porn-server/common" "91porn-server/common/log" "91porn-server/common/stderr" "91porn-server/models/l/operatorlgmod" "91porn-server/models/v/mediamod" "91porn-server/web/service/mediaser" "encoding/json" "fmt" "github.com/gin-gonic/gin" ) // List doc // @Summary 获取动漫列表列表 // @Description 获取动漫列表列表 // @Tags 后台-动漫列表 // @Accept mpfd,json // @Produce json // @Param q query mediaser.WebListReq false "请求参数" // @Success 200 object mediaser.WebListRes "成功" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/media/list [get] func List(ctx *gin.Context) { var req = &mediaser.WebListReq{} if err := ctx.ShouldBind(&req); err != nil { log.Error(fmt.Sprintf("Query media List param err:%v\n", err)) common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } res, err := req.GetList() if err != nil { log.Error(fmt.Sprintf("media GetList err:%v", err)) common.ServeJSON(ctx, stderr.ErrDbQueryError, "") return } common.ServeJSON(ctx, stderr.Success, res) } // Find doc // @Summary 获取动漫信息 // @Description 获取动漫信息 // @Tags 后台-动漫列表 // @Accept mpfd,json // @Produce json // @Param q query mediaser.WebFindMediaReq false "请求参数" // @Success 200 object mediaser.WebFindMediaRes "成功" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/media/find [get] func Find(ctx *gin.Context) { var req = &mediaser.WebFindMediaReq{} if err := ctx.ShouldBind(&req); err != nil { log.Error(fmt.Sprintf("Query media find param err:%v\n", err)) common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } res, err := req.GetMediaByID() if err != nil { log.Error(fmt.Sprintf("media find err:%v", err)) common.ServeJSON(ctx, stderr.ErrDbQueryError, err) return } common.ServeJSON(ctx, stderr.Success, res) } // Create doc // @Summary 新增动漫列表 // @Description 新增动漫列表 // @Tags 后台-动漫列表 // @Accept mpfd,json // @Produce json // @Param q query mediaser.WebCreateReq false "请求参数" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/media/create [post] func Create(ctx *gin.Context) { manager, err := common.GetAdminAct(ctx) if err != nil { common.ServeJSON(ctx, stderr.AdminIDErr, err.Error()) return } p := &mediaser.WebCreateReq{} err = ctx.ShouldBindJSON(&p) if err != nil { log.Error(fmt.Sprintf("media create param err:%v\n", err)) common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } if err = p.Validate(); err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } // 创建 code, resultID := p.Create(manager) if code != stderr.Success { if p.MediaType == mediamod.MediaTypeVideo { _, _ = mediaser.DeleteManyByTTL(resultID) } log.Error(fmt.Sprintf("media create err:%v\n", err)) common.ServeJSON(ctx, code, resultID) return } if p.MediaType == mediamod.MediaTypeVideo { code = mediaser.SendBaseInfo2AWs(mediamod.SendBaseInfo2AWsReq{ SourceID: p.SourceID, Md5: p.Md5, Title: p.EpisodeNumberName, PlayTime: p.PlayTime, MediaSize: p.MediaSize, Filename: p.Filename, Tags: p.Tags, }) if code != stderr.Success { _, _ = mediaser.DeleteManyByTTL(resultID) } } log, _ := json.Marshal(p) _ = operatorlgmod.RecordOperation(manager, "动漫列表管理", "创建", string(log), ctx.Request.URL.RequestURI()) if p.MediaType == mediamod.MediaTypeDrama { common.ServeJSON(ctx, stderr.Success, gin.H{"mediaId": resultID}) return } common.ServeJSON(ctx, stderr.Success, "") } // Update doc // @Summary 更新动漫列表 // @Description 更新动漫列表 // @Tags 后台-动漫列表 // @Accept mpfd,json // @Produce json // @Param q query mediaser.WebUpdateReq false "请求参数" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/media/update [post] func Update(ctx *gin.Context) { manager, err := common.GetAdminAct(ctx) if err != nil { common.ServeJSON(ctx, stderr.AdminIDErr, err.Error()) return } p := &mediaser.WebUpdateReq{} err = ctx.ShouldBindJSON(&p) if err != nil { log.Error(fmt.Sprintf("media update param err:%v\n", err)) common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } // 上架相关时做敏感词校验,命中直接拒绝 if detail, hit := p.CheckSensitive(); hit { common.ServeJSON(ctx, stderr.ContentSensitiveHit, detail) return } // 更新 err = p.Update(manager) if err != nil { log.Error(fmt.Sprintf("media update err:%v\n", err)) common.ServeJSON(ctx, stderr.Failure, err.Error()) return } log, _ := json.Marshal(p) _ = operatorlgmod.RecordOperation(manager, "动漫列表管理", "更新", string(log), ctx.Request.URL.RequestURI()) common.ServeJSON(ctx, stderr.Success, "") } // BatchUpdate doc // @Summary 批量更新动漫列表 // @Description 批量更新动漫列表 // @Tags 后台-动漫列表 // @Accept mpfd,json // @Produce json // @Param q query mediaser.WebBatchUpdateReq false "请求参数" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/media/batch/update [post] func BatchUpdate(ctx *gin.Context) { manager, err := common.GetAdminAct(ctx) if err != nil { common.ServeJSON(ctx, stderr.AdminIDErr, err.Error()) return } p := &mediaser.WebBatchUpdateReq{} err = ctx.ShouldBindJSON(&p) if err != nil { log.Error(fmt.Sprintf("media BatchUpdate param err:%v\n", err)) common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } if _, err = p.ValidatedIDs(); err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } // 批量上架时做敏感词校验,命中直接拒绝 if detail, hit := p.CheckSensitive(); hit { common.ServeJSON(ctx, stderr.ContentSensitiveHit, detail) return } // 更新 err = p.Update(manager) if err != nil { log.Error(fmt.Sprintf("media BatchUpdate err:%v\n", err)) common.ServeJSON(ctx, stderr.Failure, err.Error()) return } log, _ := json.Marshal(p) _ = operatorlgmod.RecordOperation(manager, "动漫列表管理", "更新", string(log), ctx.Request.URL.RequestURI()) common.ServeJSON(ctx, stderr.Success, "") } // Delete doc // @Summary 删除动漫列表 // @Description 删除动漫列表 // @Tags 后台-动漫列表 // @Accept mpfd,json // @Produce json // @Param q query mediaser.WebDeleteReq false "请求参数" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/media/delete [post] func Delete(ctx *gin.Context) { manager, err := common.GetAdminAct(ctx) if err != nil { common.ServeJSON(ctx, stderr.AdminIDErr, err.Error()) return } p := &mediaser.WebDeleteReq{} err = ctx.ShouldBindJSON(&p) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } // 删除 err = p.Delete() if err != nil { common.ServeJSON(ctx, stderr.Failure, err.Error()) return } log, _ := json.Marshal(p) _ = operatorlgmod.RecordOperation(manager, "动漫列表管理", "删除", string(log), ctx.Request.URL.RequestURI()) common.ServeJSON(ctx, stderr.Success, "") } // BatchDelete doc // @Summary 批量删除动漫列表 // @Description 批量删除动漫列表 // @Tags 后台-动漫列表 // @Accept mpfd,json // @Produce json // @Param q body mediaser.WebBatchDeleteReq false "请求参数" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/media/batch/delete [post] func BatchDelete(ctx *gin.Context) { manager, err := common.GetAdminAct(ctx) if err != nil { common.ServeJSON(ctx, stderr.AdminIDErr, err.Error()) return } p := &mediaser.WebBatchDeleteReq{} err = ctx.ShouldBindJSON(&p) if err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } // 删除 err = p.Delete() if err != nil { common.ServeJSON(ctx, stderr.Failure, err.Error()) return } log, _ := json.Marshal(p) _ = operatorlgmod.RecordOperation(manager, "动漫列表管理", "删除", string(log), ctx.Request.URL.RequestURI()) common.ServeJSON(ctx, stderr.Success, "") } // Export doc // @Summary 导出动漫列表 // @Description 导出动漫列表 // @Tags 后台-动漫管理 // @Accept mpfd,json // @Produce json // @Param q query mediaser.WebListReq false "请求参数" // @Success 200 {string} string "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/media/export [post] func Export(ctx *gin.Context) { var req = &mediaser.WebListReq{} if err := ctx.ShouldBind(&req); err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err.Error()) return } buff, err := req.Export() if err != nil { common.ServeJSON(ctx, stderr.ErrDbQueryError, err.Error()) return } common.ServeFile(ctx, "动漫列表", common.FileExcel, &buff) }