Files
cid/controller/yidun/yidun_controller.go
2026-06-10 15:41:58 +08:00

165 lines
5.0 KiB
Go

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)
}