feat: 音色管理
This commit is contained in:
@@ -12,6 +12,7 @@ type ApiGroup struct {
|
||||
VipApi
|
||||
AnalyticsApi
|
||||
UserApi
|
||||
VoiceApi
|
||||
}
|
||||
|
||||
var ApiGroupApp = new(ApiGroup)
|
||||
@@ -26,4 +27,5 @@ var (
|
||||
vipService = service.GroupApp.RadioServiceGroup.VipService
|
||||
analyticsService = service.GroupApp.RadioServiceGroup.AnalyticsService
|
||||
userService = service.GroupApp.RadioServiceGroup.UserService
|
||||
voiceService = service.GroupApp.RadioServiceGroup.VoiceService
|
||||
)
|
||||
|
||||
@@ -0,0 +1,214 @@
|
||||
package radio
|
||||
|
||||
import (
|
||||
"sundynix-go/global"
|
||||
common "sundynix-go/model/commom/request"
|
||||
"sundynix-go/model/commom/response"
|
||||
"sundynix-go/model/radio/request"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type VoiceApi struct{}
|
||||
|
||||
// GetVoiceList 获取音色列表
|
||||
// @Tags 音色管理
|
||||
// @Summary 获取音色列表
|
||||
// @Produce application/json
|
||||
// @Param data body request.GetVoiceList true "分页查询"
|
||||
// @Success 200 {object} response.Response
|
||||
// @Router /radio/voice/list [post]
|
||||
func (a *VoiceApi) GetVoiceList(c *gin.Context) {
|
||||
var req request.GetVoiceList
|
||||
err := c.ShouldBindJSON(&req)
|
||||
if err != nil {
|
||||
response.FailWithMsg("参数错误: "+err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
list, total, err := voiceService.GetVoiceList(req)
|
||||
if err != nil {
|
||||
global.Logger.Error("获取音色列表失败!", zap.Error(err))
|
||||
response.FailWithMsg(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
response.OkWithData(response.PageResult{
|
||||
List: list,
|
||||
Total: total,
|
||||
Page: req.Current,
|
||||
PageSize: req.PageSize,
|
||||
}, c)
|
||||
}
|
||||
|
||||
// GetVoiceDetail 获取音色详情
|
||||
// @Tags 音色管理
|
||||
// @Summary 获取音色详情
|
||||
// @Produce application/json
|
||||
// @Param id query string true "音色ID"
|
||||
// @Success 200 {object} response.Response
|
||||
// @Router /radio/voice/detail [get]
|
||||
func (a *VoiceApi) GetVoiceDetail(c *gin.Context) {
|
||||
id := c.Query("id")
|
||||
if id == "" {
|
||||
response.FailWithMsg("参数错误: id不能为空", c)
|
||||
return
|
||||
}
|
||||
|
||||
voice, err := voiceService.GetVoiceById(id)
|
||||
if err != nil {
|
||||
global.Logger.Error("获取音色详情失败!", zap.Error(err))
|
||||
response.FailWithMsg(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
response.OkWithData(voice, c)
|
||||
}
|
||||
|
||||
// GetVoiceOptions 获取音色选项列表(前端下拉选择用)
|
||||
// @Tags 音色管理
|
||||
// @Summary 获取音色选项列表
|
||||
// @Produce application/json
|
||||
// @Success 200 {object} response.Response
|
||||
// @Router /radio/voice/options [get]
|
||||
func (a *VoiceApi) GetVoiceOptions(c *gin.Context) {
|
||||
list, err := voiceService.GetAllEnabledVoice()
|
||||
if err != nil {
|
||||
global.Logger.Error("获取音色列表失败!", zap.Error(err))
|
||||
response.FailWithMsg(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
response.OkWithData(list, c)
|
||||
}
|
||||
|
||||
// SaveVoice 保存音色
|
||||
// @Tags 音色管理
|
||||
// @Summary 保存音色
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.SaveVoice true "音色信息"
|
||||
// @Success 200 {object} response.Response
|
||||
// @Router /radio/voice/save [post]
|
||||
func (a *VoiceApi) SaveVoice(c *gin.Context) {
|
||||
var req request.SaveVoice
|
||||
err := c.ShouldBindJSON(&req)
|
||||
if err != nil {
|
||||
response.FailWithMsg("参数错误: "+err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查speakerId是否已存在
|
||||
existing, _ := voiceService.GetVoiceBySpeakerId(req.SpeakerId)
|
||||
if existing != nil {
|
||||
response.FailWithMsg("该音色ID已存在", c)
|
||||
return
|
||||
}
|
||||
|
||||
if err := voiceService.SaveVoice(req); err != nil {
|
||||
global.Logger.Error("保存音色失败!", zap.Error(err))
|
||||
response.FailWithMsg(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
response.OkWithMsg("保存成功", c)
|
||||
}
|
||||
|
||||
// UpdateVoice 更新音色
|
||||
// @Tags 音色管理
|
||||
// @Summary 更新音色
|
||||
// @Accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.UpdateVoice true "音色信息"
|
||||
// @Success 200 {object} response.Response
|
||||
// @Router /radio/voice/update [post]
|
||||
func (a *VoiceApi) UpdateVoice(c *gin.Context) {
|
||||
var req request.UpdateVoice
|
||||
err := c.ShouldBindJSON(&req)
|
||||
if err != nil {
|
||||
response.FailWithMsg("参数错误: "+err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 如果修改了speakerId,检查是否与其他音色冲突
|
||||
if req.SpeakerId != "" {
|
||||
existing, _ := voiceService.GetVoiceBySpeakerId(req.SpeakerId)
|
||||
if existing != nil && existing.Id != req.Id {
|
||||
response.FailWithMsg("该音色ID已被其他音色使用", c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if err := voiceService.UpdateVoice(req); err != nil {
|
||||
global.Logger.Error("更新音色失败!", zap.Error(err))
|
||||
response.FailWithMsg(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
response.OkWithMsg("更新成功", c)
|
||||
}
|
||||
|
||||
// DeleteVoice 删除音色
|
||||
// @Tags 音色管理
|
||||
// @Summary 删除音色
|
||||
// @Produce json
|
||||
// @Param data body common.IdsReq true "音色ID列表"
|
||||
// @Success 200 {object} response.Response
|
||||
// @Router /radio/voice/delete [post]
|
||||
func (a *VoiceApi) DeleteVoice(c *gin.Context) {
|
||||
var req common.IdsReq
|
||||
err := c.ShouldBindJSON(&req)
|
||||
if err != nil {
|
||||
response.FailWithMsg("参数错误: id不能为空", c)
|
||||
return
|
||||
}
|
||||
|
||||
if err := voiceService.DeleteVoice(req.Ids); err != nil {
|
||||
global.Logger.Error("删除音色失败!", zap.Error(err))
|
||||
response.FailWithMsg(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
response.OkWithMsg("删除成功", c)
|
||||
}
|
||||
|
||||
// GetDefaultVoice 获取默认音色
|
||||
// @Tags 音色管理
|
||||
// @Summary 获取默认音色
|
||||
// @Produce application/json
|
||||
// @Success 200 {object} response.Response
|
||||
// @Router /radio/voice/default [get]
|
||||
func (a *VoiceApi) GetDefaultVoice(c *gin.Context) {
|
||||
voice, err := voiceService.GetDefaultVoice()
|
||||
if err != nil {
|
||||
global.Logger.Error("获取默认音色失败!", zap.Error(err))
|
||||
response.FailWithMsg(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
response.OkWithData(voice, c)
|
||||
}
|
||||
|
||||
// SetDefaultVoice 设置默认音色
|
||||
// @Tags 音色管理
|
||||
// @Summary 设置默认音色
|
||||
// @Produce json
|
||||
// @Param id query string true "音色ID"
|
||||
// @Success 200 {object} response.Response
|
||||
// @Router /radio/voice/set-default [post]
|
||||
func (a *VoiceApi) SetDefaultVoice(c *gin.Context) {
|
||||
id := c.Query("id")
|
||||
if id == "" {
|
||||
response.FailWithMsg("参数错误: id不能为空", c)
|
||||
return
|
||||
}
|
||||
|
||||
if err := voiceService.SetDefaultVoice(id); err != nil {
|
||||
global.Logger.Error("设置默认音色失败!", zap.Error(err))
|
||||
response.FailWithMsg(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
response.OkWithMsg("设置成功", c)
|
||||
}
|
||||
Reference in New Issue
Block a user