package yidun import ( "cid/service/yidun" "context" "gitea.redpowerfuture.com/red-future/common/beans" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/yidun/yidun-golang-sdk/yidun/service/antispam/text/v5/check/async/single" ) type yidunController struct{} // YidunController 易盾控制器 var YidunController = new(yidunController) // DetectTextReq 文本检测请求 type DetectTextReq struct { DataID string `json:"data_id"` Content string `json:"content" v:"required#待检测文本不能为空"` IP string `json:"ip"` Token string `json:"token"` } // DetectImageReq 图片检测请求 type DetectImageReq struct { DataID string `json:"data_id"` ImageURL string `json:"image_url" v:"required#图片URL不能为空"` CallbackURL string `json:"callback_url"` } // DetectVideoReq 视频检测请求 type DetectVideoReq struct { DataID string `json:"data_id"` VideoURL string `json:"video_url" v:"required#视频URL不能为空"` CallbackURL string `json:"callback_url"` } // DetectText 文本检测 func (c *yidunController) DetectText(ctx context.Context, req *DetectTextReq) (string, error) { ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"}) businessId := g.Cfg().MustGet(ctx, "yidun.text.business_id").String() sdkReq := single.NewTextAsyncCheckRequest(businessId) sdkReq.SetDataID(req.DataID) sdkReq.SetContent(req.Content) if req.IP != "" { sdkReq.SetIP(req.IP) } if req.Token != "" { sdkReq.SetToken(req.Token) } return yidun.TextDetection.DetectText(ctx, sdkReq) } // DetectImage 图片检测 func (c *yidunController) DetectImage(ctx context.Context, req *DetectImageReq) (*yidun.ImageSubmitResult, error) { ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"}) return yidun.ImageDetection.DetectImage(ctx, req.ImageURL, req.DataID, req.CallbackURL) } // DetectVideo 视频检测 func (c *yidunController) DetectVideo(ctx context.Context, req *DetectVideoReq) (*yidun.VideoSubmitResult, error) { ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"}) return yidun.VideoDetection.DetectVideo(ctx, req.VideoURL, req.DataID, req.CallbackURL) } // ImageCallbackResult 图片检测回调响应 type ImageCallbackResult struct { Code int `json:"code"` Msg string `json:"msg"` } // ReceiveImageCallback 接收图片检测结果推送 func (c *yidunController) ReceiveImageCallback(r *ghttp.Request) { ctx := r.Context() ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"}) callbackData := r.GetForm("callbackData", "").String() if callbackData == "" { r.Response.WriteJson(ImageCallbackResult{Code: 400, Msg: "callbackData不能为空"}) return } err := yidun.ImageDetection.ProcessImageCallback(ctx, callbackData) if err != nil { g.Log().Errorf(ctx, "处理图片检测回调失败: %v", err) r.Response.WriteJson(ImageCallbackResult{Code: 500, Msg: err.Error()}) return } r.Response.WriteJson(ImageCallbackResult{Code: 200, Msg: "success"}) } // VideoCallbackResult 视频检测回调响应 type VideoCallbackResult struct { Code int `json:"code"` Msg string `json:"msg"` } // ReceiveVideoCallback 接收视频检测结果推送 func (c *yidunController) ReceiveVideoCallback(r *ghttp.Request) { ctx := r.Context() ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"}) callbackData := r.GetForm("callbackData", "").String() if callbackData == "" { r.Response.WriteJson(VideoCallbackResult{Code: 400, Msg: "callbackData不能为空"}) return } err := yidun.VideoDetection.ProcessVideoCallback(ctx, callbackData) if err != nil { g.Log().Errorf(ctx, "处理视频检测回调失败: %v", err) r.Response.WriteJson(VideoCallbackResult{Code: 500, Msg: err.Error()}) return } r.Response.WriteJson(VideoCallbackResult{Code: 200, Msg: "success"}) } // GetVideoResult 获取视频检测结果 func (c *yidunController) GetVideoResult(r *ghttp.Request) { ctx := r.Context() ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"}) taskId := r.Get("taskId", "").String() if taskId == "" { r.Response.WriteJson(g.Map{"code": 400, "msg": "taskId不能为空"}) return } result, err := yidun.VideoDetection.GetVideoResult(ctx, taskId) if err != nil { g.Log().Errorf(ctx, "查询视频检测结果失败: %v", err) r.Response.WriteJson(g.Map{"code": 500, "msg": err.Error()}) return } r.Response.WriteJson(result) } // GetImageResult 获取图片检测结果 func (c *yidunController) GetImageResult(r *ghttp.Request) { ctx := r.Context() ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"}) taskId := r.Get("taskId", "").String() if taskId == "" { r.Response.WriteJson(g.Map{"code": 400, "msg": "taskId不能为空"}) return } result, err := yidun.ImageDetection.GetImageResult(ctx, taskId) if err != nil { g.Log().Errorf(ctx, "查询图片检测结果失败: %v", err) r.Response.WriteJson(g.Map{"code": 500, "msg": err.Error()}) return } r.Response.WriteJson(result) }