2026-07-03 15:58:29 +08:00
|
|
|
package controller
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"strconv"
|
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
"seeyon-filesystem/dto"
|
|
|
|
|
"seeyon-filesystem/middleware"
|
|
|
|
|
"seeyon-filesystem/service"
|
|
|
|
|
"seeyon-filesystem/utils"
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// FolderController 文件夹控制器
|
|
|
|
|
type FolderController struct {
|
|
|
|
|
folderService *service.FolderService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NewFolderController 创建文件夹控制器实例
|
|
|
|
|
func NewFolderController() *FolderController {
|
|
|
|
|
return &FolderController{
|
|
|
|
|
folderService: service.NewFolderService(),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Create 创建文件夹
|
|
|
|
|
// POST /api/folder
|
|
|
|
|
func (c *FolderController) Create(ctx *gin.Context) {
|
|
|
|
|
ownerID := middleware.GetCurrentUserID(ctx)
|
|
|
|
|
|
|
|
|
|
var req dto.CreateFolderRequest
|
|
|
|
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
|
|
|
|
utils.BadRequest(ctx, "参数错误: "+err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result, err := c.folderService.Create(&req, ownerID)
|
|
|
|
|
if err != nil {
|
|
|
|
|
utils.ServerError(ctx, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
utils.Success(ctx, result)
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
// GetByBizID 根据业务ID获取文件夹信息
|
|
|
|
|
// GET /api/folder/by-bizid/:bizid
|
|
|
|
|
func (c *FolderController) GetByBizID(ctx *gin.Context) {
|
|
|
|
|
ownerID := middleware.GetCurrentUserID(ctx)
|
|
|
|
|
bizID := ctx.Param("bizid")
|
|
|
|
|
if bizID == "" {
|
|
|
|
|
utils.BadRequest(ctx, "业务ID不能为空")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result, err := c.folderService.GetByBizID(bizID, ownerID)
|
|
|
|
|
if err != nil {
|
|
|
|
|
utils.NotFound(ctx, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
utils.Success(ctx, result)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ListChildren 获取文件夹子项(支持分页)
|
|
|
|
|
// GET /api/folder/:id/children?page=1&page_size=50
|
2026-07-03 15:58:29 +08:00
|
|
|
func (c *FolderController) ListChildren(ctx *gin.Context) {
|
|
|
|
|
ownerID := middleware.GetCurrentUserID(ctx)
|
|
|
|
|
|
|
|
|
|
idStr := ctx.Param("id")
|
|
|
|
|
var folderID uint64
|
|
|
|
|
if idStr == "root" {
|
|
|
|
|
folderID = 0
|
|
|
|
|
} else {
|
|
|
|
|
var err error
|
|
|
|
|
folderID, err = strconv.ParseUint(idStr, 10, 64)
|
|
|
|
|
if err != nil {
|
|
|
|
|
utils.BadRequest(ctx, "无效的文件夹ID")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-10 17:33:33 +08:00
|
|
|
// 分页参数
|
|
|
|
|
page, _ := strconv.Atoi(ctx.DefaultQuery("page", "1"))
|
|
|
|
|
pageSize, _ := strconv.Atoi(ctx.DefaultQuery("page_size", "50"))
|
|
|
|
|
if page < 1 {
|
|
|
|
|
page = 1
|
|
|
|
|
}
|
|
|
|
|
if pageSize < 1 || pageSize > 200 {
|
|
|
|
|
pageSize = 50
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result, err := c.folderService.ListChildren(folderID, ownerID, page, pageSize)
|
2026-07-03 15:58:29 +08:00
|
|
|
if err != nil {
|
|
|
|
|
utils.ServerError(ctx, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
utils.Success(ctx, result)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Rename 重命名文件夹
|
|
|
|
|
// PUT /api/folder/:id/rename
|
|
|
|
|
func (c *FolderController) Rename(ctx *gin.Context) {
|
|
|
|
|
ownerID := middleware.GetCurrentUserID(ctx)
|
|
|
|
|
|
|
|
|
|
id, err := strconv.ParseUint(ctx.Param("id"), 10, 64)
|
|
|
|
|
if err != nil {
|
|
|
|
|
utils.BadRequest(ctx, "无效的文件夹ID")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var req dto.RenameRequest
|
|
|
|
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
|
|
|
|
utils.BadRequest(ctx, "参数错误: "+err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := c.folderService.Rename(id, req.NewName, ownerID, req.Version); err != nil {
|
|
|
|
|
if strings.Contains(err.Error(), "已被其他人修改") {
|
|
|
|
|
utils.Error(ctx, 409, 409, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
utils.ServerError(ctx, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
utils.SuccessWithMessage(ctx, "重命名成功", nil)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Delete 删除文件夹
|
|
|
|
|
// DELETE /api/folder/:id
|
|
|
|
|
func (c *FolderController) Delete(ctx *gin.Context) {
|
|
|
|
|
ownerID := middleware.GetCurrentUserID(ctx)
|
|
|
|
|
|
|
|
|
|
id, err := strconv.ParseUint(ctx.Param("id"), 10, 64)
|
|
|
|
|
if err != nil {
|
|
|
|
|
utils.BadRequest(ctx, "无效的文件夹ID")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := c.folderService.Delete(id, ownerID); err != nil {
|
|
|
|
|
utils.ServerError(ctx, err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
utils.SuccessWithMessage(ctx, "已移入回收站", nil)
|
|
|
|
|
}
|