100 lines
3.0 KiB
Go
100 lines
3.0 KiB
Go
package video
|
|
|
|
import (
|
|
"context"
|
|
|
|
entity "media/model/entity/video"
|
|
|
|
"gitea.redpowerfuture.com/red-future/common/db/gfdb"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
)
|
|
|
|
var AnalysisTaskDetail = new(analysisTaskDetailDao)
|
|
|
|
type analysisTaskDetailDao struct{}
|
|
|
|
const analysisTaskDetailTable = "video_analysis_task_detail"
|
|
|
|
// Insert 创建明细
|
|
func (d *analysisTaskDetailDao) Insert(ctx context.Context, data *entity.AnalysisTaskDetail) (id int64, err error) {
|
|
r, err := gfdb.DB(ctx).Model(ctx, analysisTaskDetailTable).
|
|
Data(data).
|
|
FieldsEx(entity.AnalysisTaskDetailCols.Id).
|
|
Insert()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return r.LastInsertId()
|
|
}
|
|
|
|
// BatchInsert 批量创建明细
|
|
func (d *analysisTaskDetailDao) BatchInsert(ctx context.Context, taskID string, videoURLs []string) error {
|
|
for _, videoURL := range videoURLs {
|
|
detail := &entity.AnalysisTaskDetail{
|
|
TaskID: taskID,
|
|
VideoURL: videoURL,
|
|
Status: "pending",
|
|
}
|
|
if _, err := d.Insert(ctx, detail); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetByTaskID 根据taskId查询所有明细
|
|
func (d *analysisTaskDetailDao) GetByTaskID(ctx context.Context, taskID string) (res []*entity.AnalysisTaskDetail, err error) {
|
|
r, err := gfdb.DB(ctx).Model(ctx, analysisTaskDetailTable).
|
|
Where(entity.AnalysisTaskDetailCols.TaskID, taskID).
|
|
Order("id asc").
|
|
All()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if r == nil {
|
|
return nil, nil
|
|
}
|
|
err = r.Structs(&res)
|
|
return
|
|
}
|
|
|
|
// UpdateSuccess 更新明细为成功
|
|
func (d *analysisTaskDetailDao) UpdateSuccess(ctx context.Context, taskID string, videoURL string, videoSavePath string, captionResult string) error {
|
|
_, err := gfdb.DB(ctx).Model(ctx, analysisTaskDetailTable).
|
|
Data(g.Map{
|
|
entity.AnalysisTaskDetailCols.Status: "success",
|
|
entity.AnalysisTaskDetailCols.VideoSavePath: videoSavePath,
|
|
entity.AnalysisTaskDetailCols.CaptionResult: captionResult,
|
|
entity.AnalysisTaskDetailCols.FailReason: "",
|
|
}).
|
|
Where(entity.AnalysisTaskDetailCols.TaskID, taskID).
|
|
Where(entity.AnalysisTaskDetailCols.VideoURL, videoURL).
|
|
Update()
|
|
return err
|
|
}
|
|
|
|
// UpdateError 更新明细为失败
|
|
func (d *analysisTaskDetailDao) UpdateError(ctx context.Context, taskID string, videoURL string, failReason string) error {
|
|
_, err := gfdb.DB(ctx).Model(ctx, analysisTaskDetailTable).
|
|
Data(g.Map{
|
|
entity.AnalysisTaskDetailCols.Status: "failed",
|
|
entity.AnalysisTaskDetailCols.FailReason: failReason,
|
|
}).
|
|
Where(entity.AnalysisTaskDetailCols.TaskID, taskID).
|
|
Where(entity.AnalysisTaskDetailCols.VideoURL, videoURL).
|
|
Update()
|
|
return err
|
|
}
|
|
|
|
// UpdateVideoSavePath 更新视频保存路径
|
|
func (d *analysisTaskDetailDao) UpdateVideoSavePath(ctx context.Context, taskID string, videoURL string, savePath string) error {
|
|
_, err := gfdb.DB(ctx).Model(ctx, analysisTaskDetailTable).
|
|
Data(g.Map{
|
|
entity.AnalysisTaskDetailCols.VideoSavePath: savePath,
|
|
}).
|
|
Where(entity.AnalysisTaskDetailCols.TaskID, taskID).
|
|
Where(entity.AnalysisTaskDetailCols.VideoURL, videoURL).
|
|
Update()
|
|
return err
|
|
}
|