package check import ( dto "cid/model/dto/check" check2 "cid/service/check" "context" "fmt" "gitea.redpowerfuture.com/red-future/common/beans" ) // ContentCheckController 内容送检控制器 type ContentCheckController struct{} // ContentCheck 内容送检控制器单例 var ContentCheck = new(ContentCheckController) // StatusRes 状态响应 type StatusRes struct { Running bool `json:"running"` Config check2.ContentCheckConfig `json:"config"` PendingStats map[string]int `json:"pending_stats"` } // Start 启动送检服务 func (c *ContentCheckController) Start(ctx context.Context, req *dto.StartCheckReq) (res *beans.ResponseEmpty, err error) { ctx = WithAdminUser(ctx) if check2.TencentContentCheck.IsRunning() { return &beans.ResponseEmpty{}, nil } // 如果有配置参数,更新配置 if req.BatchSize > 0 || req.IntervalSeconds > 0 { config := check2.ContentCheckConfig{ BatchSize: req.BatchSize, ImageEnabled: req.ImageEnabled, VideoEnabled: req.VideoEnabled, IntervalSeconds: req.IntervalSeconds, } check2.TencentContentCheck.SetConfig(config) } err = check2.TencentContentCheck.Start(ctx) if err != nil { return nil, err } return &beans.ResponseEmpty{}, nil } // Stop 停止送检服务 func (c *ContentCheckController) Stop(ctx context.Context, req *dto.EmptyReq) (res *beans.ResponseEmpty, err error) { ctx = WithAdminUser(ctx) check2.TencentContentCheck.Stop(ctx) return } // Status 获取送检服务状态 func (c *ContentCheckController) Status(ctx context.Context, req *dto.EmptyReq) (res *StatusRes, err error) { ctx = WithAdminUser(ctx) res = &StatusRes{ Running: check2.TencentContentCheck.IsRunning(), Config: check2.TencentContentCheck.GetConfig(), PendingStats: check2.TencentContentCheck.GetPendingStats(ctx), } return } // ProcessImageCallback 处理图片检测回调 func (c *ContentCheckController) ProcessImageCallback(ctx context.Context, req *dto.ProcessImageCallbackReq) (res *beans.ResponseEmpty, err error) { ctx = WithAdminUser(ctx) if req.CallbackData == "" { return nil, fmt.Errorf("callbackData不能为空") } err = check2.TencentContentCallback.ProcessImageCallback(ctx, req.CallbackData) return } // ProcessVideoCallback 处理视频检测回调 func (c *ContentCheckController) ProcessVideoCallback(ctx context.Context, req *dto.ProcessVideoCallbackReq) (res *beans.ResponseEmpty, err error) { ctx = WithAdminUser(ctx) if req.CallbackData == "" { return nil, fmt.Errorf("callbackData不能为空") } err = check2.TencentContentCallback.ProcessVideoCallback(ctx, req.CallbackData) return } // ProcessImageResult 查询并处理图片检测结果(轮询模式) func (c *ContentCheckController) ProcessImageResult(ctx context.Context, req *dto.ProcessImageResultReq) (res *beans.ResponseEmpty, err error) { ctx = WithAdminUser(ctx) if req.TaskID == "" { return nil, fmt.Errorf("taskId不能为空") } err = check2.TencentContentCallback.ProcessImageResult(ctx, req.TaskID) return } // ProcessVideoResult 查询并处理视频检测结果(轮询模式) func (c *ContentCheckController) ProcessVideoResult(ctx context.Context, req *dto.ProcessVideoResultReq) (res *beans.ResponseEmpty, err error) { ctx = WithAdminUser(ctx) if req.TaskID == "" { return nil, fmt.Errorf("taskId不能为空") } err = check2.TencentContentCallback.ProcessVideoResult(ctx, req.TaskID) return } // ManualSubmitImageByID 根据图片ID手动提交送检 func (c *ContentCheckController) ManualSubmitImageByID(ctx context.Context, req *dto.ManualSubmitImageByIDReq) (res *dto.ManualSubmitRes, err error) { ctx = WithAdminUser(ctx) result, err := check2.TencentContentCheck.SubmitImageByID(ctx, req.ImageID) if err != nil { return nil, err } res = &dto.ManualSubmitRes{ TaskID: result.TaskID, } return } // ManualSubmitVideoByID 根据视频ID手动提交送检 func (c *ContentCheckController) ManualSubmitVideoByID(ctx context.Context, req *dto.ManualSubmitVideoByIDReq) (res *dto.ManualSubmitRes, err error) { ctx = WithAdminUser(ctx) result, err := check2.TencentContentCheck.SubmitVideoByID(ctx, req.VideoID) if err != nil { return nil, err } res = &dto.ManualSubmitRes{ TaskID: result.TaskID, } return } // GetImageCheckLogs 获取图片的送检日志 func (c *ContentCheckController) GetImageCheckLogs(ctx context.Context, req *dto.GetImageCheckLogsReq) (res *dto.GetCheckLogsRes, err error) { ctx = WithAdminUser(ctx) logs, err := check2.TencentContentCallback.GetCheckLogsByImageID(ctx, req.ImageID) if err != nil { return nil, err } res = &dto.GetCheckLogsRes{ List: logs, } return } // GetVideoCheckLogs 获取视频的送检日志 func (c *ContentCheckController) GetVideoCheckLogs(ctx context.Context, req *dto.GetVideoCheckLogsReq) (res *dto.GetCheckLogsRes, err error) { ctx = WithAdminUser(ctx) logs, err := check2.TencentContentCallback.GetCheckLogsByVideoID(ctx, req.VideoID) if err != nil { return nil, err } res = &dto.GetCheckLogsRes{ List: logs, } return }