296
server/api/v1/app/worldbook.go
Normal file
296
server/api/v1/app/worldbook.go
Normal file
@@ -0,0 +1,296 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user