113 lines
3.2 KiB
Go
113 lines
3.2 KiB
Go
package video
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
dto "media/model/dto/video"
|
|
entity "media/model/entity/video"
|
|
|
|
"gitea.redpowerfuture.com/red-future/common/db/gfdb"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
var MergeTask = new(mergeTaskDao)
|
|
|
|
type mergeTaskDao struct{}
|
|
|
|
const mergeTaskTable = "video_audio_merge_task"
|
|
|
|
// Insert 创建任务(排除 id 字段,让数据库自增)
|
|
func (d *mergeTaskDao) Insert(ctx context.Context, data *entity.VideoAudioMergeTask) (id int64, err error) {
|
|
r, err := gfdb.DB(ctx).Model(ctx, mergeTaskTable).
|
|
Data(data).
|
|
FieldsEx(entity.VideoAudioMergeTaskCols.Id).
|
|
Insert()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return r.LastInsertId()
|
|
}
|
|
|
|
// GetByTaskID 根据taskId查询任务
|
|
func (d *mergeTaskDao) GetByTaskID(ctx context.Context, taskID string) (res *entity.VideoAudioMergeTask, err error) {
|
|
r, err := gfdb.DB(ctx).Model(ctx, mergeTaskTable).
|
|
Where(entity.VideoAudioMergeTaskCols.TaskID, taskID).
|
|
One()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if r == nil {
|
|
return nil, nil
|
|
}
|
|
err = r.Struct(&res)
|
|
return
|
|
}
|
|
|
|
// UpdateRunning 更新为运行中
|
|
func (d *mergeTaskDao) UpdateRunning(ctx context.Context, taskID string) error {
|
|
_, err := gfdb.DB(ctx).Model(ctx, mergeTaskTable).
|
|
Data(g.Map{
|
|
entity.VideoAudioMergeTaskCols.Status: "running",
|
|
}).
|
|
Where(entity.VideoAudioMergeTaskCols.TaskID, taskID).
|
|
Update()
|
|
return err
|
|
}
|
|
|
|
// UpdateSuccess 更新为成功
|
|
func (d *mergeTaskDao) UpdateSuccess(ctx context.Context, taskID string, fileURL string, fileSize int64, fileName, fileFormat, fileAddrPrefix, durationStr string) error {
|
|
_, err := gfdb.DB(ctx).Model(ctx, mergeTaskTable).
|
|
Data(g.Map{
|
|
entity.VideoAudioMergeTaskCols.Status: "success",
|
|
entity.VideoAudioMergeTaskCols.FileURL: fileURL,
|
|
entity.VideoAudioMergeTaskCols.FileSize: fileSize,
|
|
entity.VideoAudioMergeTaskCols.FileName: fileName,
|
|
entity.VideoAudioMergeTaskCols.FileFormat: fileFormat,
|
|
entity.VideoAudioMergeTaskCols.FileAddressPrefix: fileAddrPrefix,
|
|
entity.VideoAudioMergeTaskCols.DurationStr: durationStr,
|
|
entity.VideoAudioMergeTaskCols.ErrorMessage: "",
|
|
}).
|
|
Where(entity.VideoAudioMergeTaskCols.TaskID, taskID).
|
|
Update()
|
|
return err
|
|
}
|
|
|
|
// UpdateError 更新为失败
|
|
func (d *mergeTaskDao) UpdateError(ctx context.Context, taskID string, errMsg string) error {
|
|
_, err := gfdb.DB(ctx).Model(ctx, mergeTaskTable).
|
|
Data(g.Map{
|
|
entity.VideoAudioMergeTaskCols.Status: "failed",
|
|
entity.VideoAudioMergeTaskCols.ErrorMessage: errMsg,
|
|
}).
|
|
Where(entity.VideoAudioMergeTaskCols.TaskID, taskID).
|
|
Update()
|
|
return err
|
|
}
|
|
|
|
// EntityToTaskRes 实体转DTO
|
|
func EntityToMergeTaskRes(e *entity.VideoAudioMergeTask) *dto.GetMergeTaskRes {
|
|
res := &dto.GetMergeTaskRes{
|
|
TaskID: e.TaskID,
|
|
Status: e.Status,
|
|
}
|
|
if e.CreatedAt != nil {
|
|
res.CreatedAt = gconv.Int64(e.CreatedAt.Timestamp())
|
|
} else {
|
|
res.CreatedAt = time.Now().UnixMilli()
|
|
}
|
|
if e.Status == "success" {
|
|
res.FileURL = e.FileURL
|
|
res.FileSize = e.FileSize
|
|
res.FileName = e.FileName
|
|
res.FileFormat = e.FileFormat
|
|
res.FileAddressPrefix = e.FileAddressPrefix
|
|
res.DurationStr = e.DurationStr
|
|
}
|
|
if e.Status == "failed" {
|
|
res.ErrorMessage = e.ErrorMessage
|
|
}
|
|
return res
|
|
}
|