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) } // 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 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 } } // 分页参数 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) 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) }