297 lines
8.9 KiB
Go
297 lines
8.9 KiB
Go
package app
|
||
|
||
import (
|
||
"net/http"
|
||
"strconv"
|
||
|
||
"git.echol.cn/loser/st/server/global"
|
||
"git.echol.cn/loser/st/server/model/app/request"
|
||
"git.echol.cn/loser/st/server/model/common"
|
||
commonResponse "git.echol.cn/loser/st/server/model/common/response"
|
||
"git.echol.cn/loser/st/server/service"
|
||
"github.com/gin-gonic/gin"
|
||
"go.uber.org/zap"
|
||
)
|
||
|
||
type WorldbookApi struct{}
|
||
|
||
// CreateWorldbook
|
||
// @Tags AppWorldbook
|
||
// @Summary 创建世界书
|
||
// @Router /app/worldbook [post]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) CreateWorldbook(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
var req request.CreateWorldbookRequest
|
||
if err := c.ShouldBindJSON(&req); err != nil {
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
resp, err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.CreateWorldbook(userID, &req)
|
||
if err != nil {
|
||
global.GVA_LOG.Error("创建世界书失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithData(resp, c)
|
||
}
|
||
|
||
// GetWorldbookList
|
||
// @Tags AppWorldbook
|
||
// @Summary 获取世界书列表
|
||
// @Router /app/worldbook [get]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) GetWorldbookList(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
var req request.GetWorldbookListRequest
|
||
req.Page, _ = strconv.Atoi(c.DefaultQuery("page", "1"))
|
||
req.PageSize, _ = strconv.Atoi(c.DefaultQuery("pageSize", "20"))
|
||
req.Keyword = c.Query("keyword")
|
||
if req.Page < 1 {
|
||
req.Page = 1
|
||
}
|
||
if req.PageSize < 1 || req.PageSize > 100 {
|
||
req.PageSize = 20
|
||
}
|
||
list, total, err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.GetWorldbookList(userID, &req)
|
||
if err != nil {
|
||
global.GVA_LOG.Error("获取世界书列表失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithDetailed(commonResponse.PageResult{
|
||
List: list,
|
||
Total: total,
|
||
Page: req.Page,
|
||
PageSize: req.PageSize,
|
||
}, "获取成功", c)
|
||
}
|
||
|
||
// GetWorldbookByID
|
||
// @Tags AppWorldbook
|
||
// @Summary 获取世界书详情
|
||
// @Router /app/worldbook/:id [get]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) GetWorldbookByID(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
|
||
if err != nil {
|
||
commonResponse.FailWithMessage("无效的世界书ID", c)
|
||
return
|
||
}
|
||
resp, err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.GetWorldbookByID(userID, uint(id))
|
||
if err != nil {
|
||
global.GVA_LOG.Error("获取世界书失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithData(resp, c)
|
||
}
|
||
|
||
// UpdateWorldbook
|
||
// @Tags AppWorldbook
|
||
// @Summary 更新世界书
|
||
// @Router /app/worldbook/:id [put]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) UpdateWorldbook(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
|
||
if err != nil {
|
||
commonResponse.FailWithMessage("无效的世界书ID", c)
|
||
return
|
||
}
|
||
var req request.UpdateWorldbookRequest
|
||
if err := c.ShouldBindJSON(&req); err != nil {
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
if err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.UpdateWorldbook(userID, uint(id), &req); err != nil {
|
||
global.GVA_LOG.Error("更新世界书失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithMessage("更新成功", c)
|
||
}
|
||
|
||
// DeleteWorldbook
|
||
// @Tags AppWorldbook
|
||
// @Summary 删除世界书
|
||
// @Router /app/worldbook/:id [delete]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) DeleteWorldbook(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
|
||
if err != nil {
|
||
commonResponse.FailWithMessage("无效的世界书ID", c)
|
||
return
|
||
}
|
||
if err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.DeleteWorldbook(userID, uint(id)); err != nil {
|
||
global.GVA_LOG.Error("删除世界书失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithMessage("删除成功", c)
|
||
}
|
||
|
||
// ImportWorldbook
|
||
// @Tags AppWorldbook
|
||
// @Summary 导入世界书(JSON)
|
||
// @Router /app/worldbook/import [post]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) ImportWorldbook(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
file, header, err := c.Request.FormFile("file")
|
||
if err != nil {
|
||
commonResponse.FailWithMessage("请上传文件", c)
|
||
return
|
||
}
|
||
defer file.Close()
|
||
|
||
if header.Size > 5*1024*1024 {
|
||
commonResponse.FailWithMessage("文件大小不能超过 5MB", c)
|
||
return
|
||
}
|
||
|
||
buf := make([]byte, header.Size)
|
||
if _, err := file.Read(buf); err != nil {
|
||
commonResponse.FailWithMessage("读取文件失败", c)
|
||
return
|
||
}
|
||
|
||
// 去掉扩展名作为名称
|
||
filename := header.Filename
|
||
for i := len(filename) - 1; i >= 0; i-- {
|
||
if filename[i] == '.' {
|
||
filename = filename[:i]
|
||
break
|
||
}
|
||
}
|
||
|
||
resp, err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.ImportFromJSON(userID, buf, filename)
|
||
if err != nil {
|
||
global.GVA_LOG.Error("导入世界书失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithData(resp, c)
|
||
}
|
||
|
||
// ExportWorldbook
|
||
// @Tags AppWorldbook
|
||
// @Summary 导出世界书为 JSON
|
||
// @Router /app/worldbook/:id/export [get]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) ExportWorldbook(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
|
||
if err != nil {
|
||
commonResponse.FailWithMessage("无效的世界书ID", c)
|
||
return
|
||
}
|
||
data, filename, err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.ExportToJSON(userID, uint(id))
|
||
if err != nil {
|
||
global.GVA_LOG.Error("导出世界书失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
c.Header("Content-Disposition", "attachment; filename="+filename)
|
||
c.Data(http.StatusOK, "application/json", data)
|
||
}
|
||
|
||
// CreateEntry
|
||
// @Tags AppWorldbook
|
||
// @Summary 创建世界书条目
|
||
// @Router /app/worldbook/:id/entry [post]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) CreateEntry(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
worldbookID, err := strconv.ParseUint(c.Param("id"), 10, 32)
|
||
if err != nil {
|
||
commonResponse.FailWithMessage("无效的世界书ID", c)
|
||
return
|
||
}
|
||
var req request.CreateEntryRequest
|
||
if err := c.ShouldBindJSON(&req); err != nil {
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
resp, err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.CreateEntry(userID, uint(worldbookID), &req)
|
||
if err != nil {
|
||
global.GVA_LOG.Error("创建世界书条目失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithData(resp, c)
|
||
}
|
||
|
||
// GetEntryList
|
||
// @Tags AppWorldbook
|
||
// @Summary 获取世界书条目列表
|
||
// @Router /app/worldbook/:id/entries [get]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) GetEntryList(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
worldbookID, err := strconv.ParseUint(c.Param("id"), 10, 32)
|
||
if err != nil {
|
||
commonResponse.FailWithMessage("无效的世界书ID", c)
|
||
return
|
||
}
|
||
list, total, err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.GetEntryList(userID, uint(worldbookID))
|
||
if err != nil {
|
||
global.GVA_LOG.Error("获取条目列表失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithDetailed(commonResponse.PageResult{
|
||
List: list,
|
||
Total: total,
|
||
Page: 0,
|
||
PageSize: 0,
|
||
}, "获取成功", c)
|
||
}
|
||
|
||
// UpdateEntry
|
||
// @Tags AppWorldbook
|
||
// @Summary 更新世界书条目
|
||
// @Router /app/worldbook/:id/entry/:entryId [put]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) UpdateEntry(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
entryID, err := strconv.ParseUint(c.Param("entryId"), 10, 32)
|
||
if err != nil {
|
||
commonResponse.FailWithMessage("无效的条目ID", c)
|
||
return
|
||
}
|
||
var req request.UpdateEntryRequest
|
||
if err := c.ShouldBindJSON(&req); err != nil {
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
if err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.UpdateEntry(userID, uint(entryID), &req); err != nil {
|
||
global.GVA_LOG.Error("更新条目失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithMessage("更新成功", c)
|
||
}
|
||
|
||
// DeleteEntry
|
||
// @Tags AppWorldbook
|
||
// @Summary 删除世界书条目
|
||
// @Router /app/worldbook/:id/entry/:entryId [delete]
|
||
// @Security ApiKeyAuth
|
||
func (a *WorldbookApi) DeleteEntry(c *gin.Context) {
|
||
userID := common.GetAppUserID(c)
|
||
entryID, err := strconv.ParseUint(c.Param("entryId"), 10, 32)
|
||
if err != nil {
|
||
commonResponse.FailWithMessage("无效的条目ID", c)
|
||
return
|
||
}
|
||
if err := service.ServiceGroupApp.AppServiceGroup.WorldbookService.DeleteEntry(userID, uint(entryID)); err != nil {
|
||
global.GVA_LOG.Error("删除条目失败", zap.Error(err))
|
||
commonResponse.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
commonResponse.OkWithMessage("删除成功", c)
|
||
}
|