package audio import ( "context" "strings" dto "media/model/dto/audio" service "media/service/asr" "gitea.com/red-future/common/beans" "gitea.com/red-future/common/utils" "github.com/gogf/gf/v2/frame/g" ) type audio struct{} var AudioExtract = new(audio) // Create 创建语音转文字异步任务 POST /audio/transcribe func (c *audio) Create(ctx context.Context, req *dto.TranscribeReq) (res *dto.CreateTaskRes, err error) { ctx = withUser(ctx) fileNames := make([]string, len(req.VideoURLs)) for i, u := range req.VideoURLs { parts := strings.Split(u, "/") fileNames[i] = parts[len(parts)-1] } g.Log().Infof(ctx, "收到转写请求, 回调URL: %s", req.CallbackURL) params := &service.CreateTaskParams{ InputData: req.VideoURLs, FileNames: fileNames, Model: req.Model, Language: req.Language, Threshold: req.Threshold, CallbackURL: req.CallbackURL, } return service.AudioTask.Create(ctx, params) } // GetTask 获取任务详情 GET /audio/task/{taskId} func (c *audio) GetTask(ctx context.Context, req *dto.GetTaskReq) (res *dto.GetTaskRes, err error) { ctx = withUser(ctx) return service.AudioTask.GetTask(ctx, req) } // GetProgress 获取任务进度 GET /audio/task/{taskId}/progress func (c *audio) GetProgress(ctx context.Context, req *dto.GetProgressReq) (res *dto.GetProgressRes, err error) { ctx = withUser(ctx) return service.AudioTask.GetProgress(ctx, req) } // ListTasks 获取任务列表 GET /audio/tasks func (c *audio) ListTasks(ctx context.Context, req *dto.ListTaskReq) (res *dto.ListTaskRes, err error) { ctx = withUser(ctx) return service.AudioTask.ListTasks(ctx, req) } // withUser 优先从请求头/X-User-Info/Token 提取用户信息,没有则用默认 admin func withUser(ctx context.Context) context.Context { if ctx.Value("user") != nil { return ctx } user, err := utils.GetUserInfo(ctx) if err == nil && user != nil && user.TenantId > 0 { g.Log().Infof(ctx, "[用户信息] 从请求头解析到用户: userName=%s, tenantId=%d", user.UserName, user.TenantId) ctx = context.WithValue(ctx, "user", user) return ctx } if err != nil { g.Log().Debugf(ctx, "[用户信息] 解析失败(%v), 使用默认admin/tenant=1", err) } ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin", TenantId: 1}) return ctx }