Files
ai_proxy/server/api/v1/app/ai_preset.go
2026-03-03 06:05:51 +08:00

233 lines
6.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package app
import (
"strconv"
"git.echol.cn/loser/ai_proxy/server/global"
"git.echol.cn/loser/ai_proxy/server/model/app/request"
commonRequest "git.echol.cn/loser/ai_proxy/server/model/common/request"
"git.echol.cn/loser/ai_proxy/server/model/common/response"
"git.echol.cn/loser/ai_proxy/server/service"
"git.echol.cn/loser/ai_proxy/server/utils"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
type AiPresetApi struct{}
var aiPresetService = service.ServiceGroupApp.AppServiceGroup.AiPresetService
// CreateAiPreset 创建AI预设
// @Tags AiPreset
// @Summary 创建AI预设
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body request.CreateAiPresetRequest true "预设信息"
// @Success 200 {object} response.Response{data=app.AiPreset,msg=string} "创建成功"
// @Router /app/preset [post]
func (a *AiPresetApi) CreateAiPreset(c *gin.Context) {
var req request.CreateAiPresetRequest
err := c.ShouldBindJSON(&req)
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
// 尝试获取用户ID如果没有则使用0公开访问
userId := uint(0)
if id := utils.GetUserID(c); id > 0 {
userId = id
}
preset, err := aiPresetService.CreateAiPreset(userId, &req)
if err != nil {
global.GVA_LOG.Error("创建预设失败!", zap.Error(err))
response.FailWithMessage("创建预设失败", c)
return
}
response.OkWithData(preset, c)
}
// DeleteAiPreset 删除AI预设
// @Tags AiPreset
// @Summary 删除AI预设
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param id path uint true "预设ID"
// @Success 200 {object} response.Response{msg=string} "删除成功"
// @Router /app/preset/:id [delete]
func (a *AiPresetApi) DeleteAiPreset(c *gin.Context) {
id, _ := strconv.ParseUint(c.Param("id"), 10, 32)
// 尝试获取用户ID如果没有则使用0公开访问
userId := uint(0)
if uid := utils.GetUserID(c); uid > 0 {
userId = uid
}
err := aiPresetService.DeleteAiPreset(uint(id), userId)
if err != nil {
global.GVA_LOG.Error("删除预设失败!", zap.Error(err))
response.FailWithMessage("删除预设失败", c)
return
}
response.OkWithMessage("删除成功", c)
}
// UpdateAiPreset 更新AI预设
// @Tags AiPreset
// @Summary 更新AI预设
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body request.UpdateAiPresetRequest true "预设信息"
// @Success 200 {object} response.Response{data=app.AiPreset,msg=string} "更新成功"
// @Router /app/preset [put]
func (a *AiPresetApi) UpdateAiPreset(c *gin.Context) {
var req request.UpdateAiPresetRequest
err := c.ShouldBindJSON(&req)
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
// 尝试获取用户ID如果没有则使用0公开访问
userId := uint(0)
if id := utils.GetUserID(c); id > 0 {
userId = id
}
preset, err := aiPresetService.UpdateAiPreset(userId, &req)
if err != nil {
global.GVA_LOG.Error("更新预设失败!", zap.Error(err))
response.FailWithMessage("更新预设失败", c)
return
}
response.OkWithData(preset, c)
}
// GetAiPreset 获取AI预设详情
// @Tags AiPreset
// @Summary 获取AI预设详情
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param id path uint true "预设ID"
// @Success 200 {object} response.Response{data=app.AiPreset,msg=string} "获取成功"
// @Router /app/preset/:id [get]
func (a *AiPresetApi) GetAiPreset(c *gin.Context) {
id, _ := strconv.ParseUint(c.Param("id"), 10, 32)
// 尝试获取用户ID如果没有则使用0公开访问
userId := uint(0)
if uid := utils.GetUserID(c); uid > 0 {
userId = uid
}
preset, err := aiPresetService.GetAiPreset(uint(id), userId)
if err != nil {
global.GVA_LOG.Error("获取预设失败!", zap.Error(err))
response.FailWithMessage("获取预设失败", c)
return
}
response.OkWithData(preset, c)
}
// GetAiPresetList 获取AI预设列表
// @Tags AiPreset
// @Summary 获取AI预设列表
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data query request.PageInfo true "分页信息"
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "获取成功"
// @Router /app/preset/list [get]
func (a *AiPresetApi) GetAiPresetList(c *gin.Context) {
var pageInfo commonRequest.PageInfo
err := c.ShouldBindQuery(&pageInfo)
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
// 尝试获取用户ID如果没有则使用0公开访问
userId := uint(0)
if id := utils.GetUserID(c); id > 0 {
userId = id
}
list, total, err := aiPresetService.GetAiPresetList(userId, pageInfo)
if err != nil {
global.GVA_LOG.Error("获取预设列表失败!", zap.Error(err))
response.FailWithMessage("获取预设列表失败", c)
return
}
response.OkWithDetailed(response.PageResult{
List: list,
Total: total,
Page: pageInfo.Page,
PageSize: pageInfo.PageSize,
}, "获取成功", c)
}
// ImportAiPreset 导入AI预设支持SillyTavern格式
// @Tags AiPreset
// @Summary 导入AI预设
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body request.ImportAiPresetRequest true "导入数据"
// @Success 200 {object} response.Response{data=app.AiPreset,msg=string} "导入成功"
// @Router /app/preset/import [post]
func (a *AiPresetApi) ImportAiPreset(c *gin.Context) {
var req request.ImportAiPresetRequest
err := c.ShouldBindJSON(&req)
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
// 尝试获取用户ID如果没有则使用0公开访问
userId := uint(0)
if id := utils.GetUserID(c); id > 0 {
userId = id
}
preset, err := aiPresetService.ImportAiPreset(userId, &req)
if err != nil {
global.GVA_LOG.Error("导入预设失败!", zap.Error(err))
response.FailWithMessage("导入预设失败", c)
return
}
response.OkWithData(preset, c)
}
// ExportAiPreset 导出AI预设
// @Tags AiPreset
// @Summary 导出AI预设
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param id path uint true "预设ID"
// @Success 200 {object} map[string]interface{} "导出数据"
// @Router /app/preset/:id/export [get]
func (a *AiPresetApi) ExportAiPreset(c *gin.Context) {
id, _ := strconv.ParseUint(c.Param("id"), 10, 32)
// 尝试获取用户ID如果没有则使用0公开访问
userId := uint(0)
if uid := utils.GetUserID(c); uid > 0 {
userId = uid
}
data, err := aiPresetService.ExportAiPreset(uint(id), userId)
if err != nil {
global.GVA_LOG.Error("导出预设失败!", zap.Error(err))
response.FailWithMessage("导出预设失败", c)
return
}
c.JSON(200, data)
}