136 lines
3.7 KiB
Go
136 lines
3.7 KiB
Go
package dao
|
|
|
|
import (
|
|
"ai-agent/digital-human/consts/public"
|
|
"ai-agent/digital-human/model/dto"
|
|
"ai-agent/digital-human/model/entity"
|
|
"context"
|
|
|
|
"gitea.redpowerfuture.com/red-future/common/beans"
|
|
"gitea.redpowerfuture.com/red-future/common/db/gfdb"
|
|
"github.com/gogf/gf/v2/database/gdb"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
// CustomVoice 自定义音色数据访问层
|
|
var CustomVoice = &customVoice{}
|
|
|
|
type customVoice struct{}
|
|
|
|
// Insert 插入自定义音色
|
|
func (d *customVoice) Insert(ctx context.Context, req *dto.CreateCustomVoiceReq) (id int64, err error) {
|
|
var result *entity.CustomVoice
|
|
if err = gconv.Struct(req, &result); err != nil {
|
|
return
|
|
}
|
|
// 初始状态:生成中
|
|
result.Status = 0
|
|
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).Data(&result).Insert()
|
|
if err != nil {
|
|
return
|
|
}
|
|
return r.LastInsertId()
|
|
}
|
|
|
|
func (d *customVoice) UpdateReferenceAudio(ctx context.Context, id int64, referenceAudio []byte) (rows int64, err error) {
|
|
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).
|
|
Where(entity.CustomVoiceCol.Id, id).
|
|
Data(gdb.Map{
|
|
entity.CustomVoiceCol.ReferenceAudio: referenceAudio,
|
|
}).
|
|
Update()
|
|
if err != nil {
|
|
return
|
|
}
|
|
return r.RowsAffected()
|
|
}
|
|
|
|
func (d *customVoice) UpdateDescription(ctx context.Context, id int64, description string) (rows int64, err error) {
|
|
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).
|
|
Where(entity.CustomVoiceCol.Id, id).
|
|
Data(gdb.Map{
|
|
entity.CustomVoiceCol.Description: description,
|
|
}).
|
|
Update()
|
|
if err != nil {
|
|
return
|
|
}
|
|
return r.RowsAffected()
|
|
}
|
|
|
|
// UpdateStatus 更新自定义音色状态/结果
|
|
func (d *customVoice) UpdateStatus(ctx context.Context, id int64, status int, errorMsg string, ossFile string) (rows int64, err error) {
|
|
data := gdb.Map{
|
|
entity.CustomVoiceCol.Status: status,
|
|
}
|
|
if errorMsg != "" {
|
|
data[entity.CustomVoiceCol.ErrorMsg] = errorMsg
|
|
}
|
|
if ossFile != "" {
|
|
data[entity.CustomVoiceCol.OssFile] = ossFile
|
|
}
|
|
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).
|
|
Where(entity.CustomVoiceCol.Id, id).
|
|
Data(data).
|
|
Update()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return r.RowsAffected()
|
|
}
|
|
|
|
// Delete 删除自定义音色
|
|
func (d *customVoice) Delete(ctx context.Context, id int64) (rows int64, err error) {
|
|
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).Where(entity.CustomVoiceCol.Id, id).Delete()
|
|
if err != nil {
|
|
return
|
|
}
|
|
return r.RowsAffected()
|
|
}
|
|
|
|
// GetOne 获取单个自定义音色
|
|
func (d *customVoice) GetOne(ctx context.Context, id int64) (customVoice *entity.CustomVoice, err error) {
|
|
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice).Where(entity.CustomVoiceCol.Id, id).One()
|
|
if err != nil {
|
|
return
|
|
}
|
|
err = r.Struct(&customVoice)
|
|
return
|
|
}
|
|
|
|
// List 获取自定义音色列表
|
|
func (d *customVoice) List(ctx context.Context, req *dto.ListCustomVoiceReq) (res []*entity.CustomVoice, total int, err error) {
|
|
model := gfdb.DB(ctx).Model(ctx, public.TableNameCustomVoice)
|
|
|
|
// 处理分页
|
|
if req.Page == nil {
|
|
req.Page = &beans.Page{PageNum: 1, PageSize: 20}
|
|
}
|
|
|
|
r, total, err := model.OrderDesc(entity.CustomVoiceCol.CreatedAt).Page(int(req.Page.PageNum), int(req.Page.PageSize)).AllAndCount(false)
|
|
if err != nil {
|
|
return
|
|
}
|
|
err = r.Structs(&res)
|
|
return
|
|
}
|
|
|
|
// GetCustomVoiceItem 转换为 DTO 列表项
|
|
func (d *customVoice) GetCustomVoiceItem(entity *entity.CustomVoice) *dto.CustomVoiceItem {
|
|
item := &dto.CustomVoiceItem{
|
|
ID: gconv.String(entity.Id),
|
|
Name: entity.Name,
|
|
Description: entity.Description,
|
|
Status: entity.Status,
|
|
ErrorMsg: entity.ErrorMsg,
|
|
OssFile: entity.OssFile,
|
|
}
|
|
if entity.CreatedAt != nil {
|
|
item.CreatedAt = entity.CreatedAt
|
|
}
|
|
if entity.UpdatedAt != nil {
|
|
item.UpdatedAt = entity.UpdatedAt
|
|
}
|
|
return item
|
|
}
|