Files
cid/controller/check/content_check_controller.go
T
2026-08-25 10:14:32 +08:00

177 lines
5.0 KiB
Go

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
}