Files
media/controller/audio/audio_extract_controller.go
2026-06-10 16:10:10 +08:00

80 lines
2.3 KiB
Go

package audio
import (
"context"
"strings"
dto "media/model/dto/audio"
service "media/service/asr"
"gitea.redpowerfuture.com/red-future/common/beans"
"gitea.redpowerfuture.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
}