Files
filestoragesystem/go/internal/controller/project.go
T
2026-08-23 00:48:10 +08:00

114 lines
2.9 KiB
Go

package controller
import (
"github.com/gin-gonic/gin"
"filestoragesystem/internal/middleware"
"filestoragesystem/internal/utils"
)
// ProjectController 项目控制器
type ProjectController struct {
*Base
}
// NewProjectController 创建项目控制器
func NewProjectController(b *Base) *ProjectController { return &ProjectController{Base: b} }
type createProjectReq struct {
Name string `json:"name" binding:"required"`
Description string `json:"description"`
StorageLimit int64 `json:"storage_limit"` // 0使用默认
}
// Create 创建项目
func (ctl *ProjectController) Create(c *gin.Context) {
var req createProjectReq
if !bindJSON(c, &req) {
return
}
userID := middleware.CurrentUserID(c)
p, err := ctl.svc.Project.Create(userID, req.Name, req.Description, req.StorageLimit)
if err != nil {
ctl.svc.RecordOpLog(ctl.opCtx(c), "create", "project", 0, req.Name, false, err.Error())
utils.FailMsg(c, err.Error())
return
}
ctl.svc.RecordOpLog(ctl.opCtx(c), "create", "project", p.ID, p.Name, true, "")
utils.OK(c, p)
}
// List 项目列表
func (ctl *ProjectController) List(c *gin.Context) {
userID := middleware.CurrentUserID(c)
page, pageSize := utils.ParsePage(c)
all := c.Query("all") == "true" && middleware.IsAdmin(c)
projects, total, err := ctl.svc.Project.List(userID, c.Query("keyword"), all, page, pageSize)
if err != nil {
utils.ServerError(c, err.Error())
return
}
utils.OKPage(c, projects, total, page, pageSize)
}
// Get 项目详情
func (ctl *ProjectController) Get(c *gin.Context) {
id, ok := paramID(c)
if !ok {
return
}
userID := middleware.CurrentUserID(c)
p, err := ctl.svc.Project.Get(userID, id, middleware.IsAdmin(c))
if err != nil {
utils.FailMsg(c, err.Error())
return
}
utils.OK(c, p)
}
type updateProjectReq struct {
Name string `json:"name"`
Description string `json:"description"`
StorageLimit int64 `json:"storage_limit"`
}
// Update 更新项目
func (ctl *ProjectController) Update(c *gin.Context) {
id, ok := paramID(c)
if !ok {
return
}
var req updateProjectReq
if !bindJSON(c, &req) {
return
}
userID := middleware.CurrentUserID(c)
p, err := ctl.svc.Project.Update(userID, id, middleware.IsAdmin(c), req.Name, req.Description, req.StorageLimit)
if err != nil {
utils.FailMsg(c, err.Error())
return
}
ctl.svc.RecordOpLog(ctl.opCtx(c), "update", "project", id, p.Name, true, "")
utils.OK(c, p)
}
// Delete 删除项目
func (ctl *ProjectController) Delete(c *gin.Context) {
id, ok := paramID(c)
if !ok {
return
}
userID := middleware.CurrentUserID(c)
p, _ := ctl.svc.Project.Get(userID, id, middleware.IsAdmin(c))
if err := ctl.svc.Project.Delete(userID, id, middleware.IsAdmin(c)); err != nil {
utils.FailMsg(c, err.Error())
return
}
name := ""
if p != nil {
name = p.Name
}
ctl.svc.RecordOpLog(ctl.opCtx(c), "delete", "project", id, name, true, "")
utils.OKMsg(c, "项目已删除")
}