初始化
This commit is contained in:
151
server/controller/storage_assign_controller.go
Normal file
151
server/controller/storage_assign_controller.go
Normal file
@@ -0,0 +1,151 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"seeyon-filesystem/dto"
|
||||
"seeyon-filesystem/middleware"
|
||||
"seeyon-filesystem/service"
|
||||
"seeyon-filesystem/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// StorageAssignController 存储策略分配控制器
|
||||
type StorageAssignController struct {
|
||||
assignService *service.StorageAssignService
|
||||
}
|
||||
|
||||
func NewStorageAssignController() *StorageAssignController {
|
||||
return &StorageAssignController{
|
||||
assignService: service.NewStorageAssignService(),
|
||||
}
|
||||
}
|
||||
|
||||
// ========== 用户接口 ==========
|
||||
|
||||
// GetMyStorageInfo 获取当前用户的存储策略信息
|
||||
// GET /api/user/storage-info
|
||||
func (c *StorageAssignController) GetMyStorageInfo(ctx *gin.Context) {
|
||||
userID := middleware.GetCurrentUserID(ctx)
|
||||
info, err := c.assignService.GetUserStorageInfo(userID)
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, "获取存储信息失败")
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, info)
|
||||
}
|
||||
|
||||
// ========== 管理员接口 ==========
|
||||
|
||||
// ListAssignments 获取所有分配规则
|
||||
// GET /api/admin/storage-assignments
|
||||
func (c *StorageAssignController) ListAssignments(ctx *gin.Context) {
|
||||
assignments, err := c.assignService.ListAssignments()
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, "查询失败")
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, assignments)
|
||||
}
|
||||
|
||||
// SetDefault 设置系统默认存储策略
|
||||
// POST /api/admin/storage-assignments/default
|
||||
func (c *StorageAssignController) SetDefault(ctx *gin.Context) {
|
||||
var req struct {
|
||||
PolicyID uint64 `json:"policy_id" binding:"required"`
|
||||
}
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.BadRequest(ctx, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.assignService.SetDefault(req.PolicyID); err != nil {
|
||||
utils.ServerError(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
utils.SuccessWithMessage(ctx, "默认策略已设置", nil)
|
||||
}
|
||||
|
||||
// AssignToUser 为用户分配存储策略
|
||||
// POST /api/admin/storage-assignments/user
|
||||
func (c *StorageAssignController) AssignToUser(ctx *gin.Context) {
|
||||
var req dto.StorageAssignRequest
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.BadRequest(ctx, "参数错误: "+err.Error())
|
||||
return
|
||||
}
|
||||
if req.UserID == 0 {
|
||||
utils.BadRequest(ctx, "请指定用户ID")
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.assignService.AssignToUser(req.UserID, req.PolicyID, req.StorageQuota, req.AccessMode); err != nil {
|
||||
utils.ServerError(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
utils.SuccessWithMessage(ctx, "分配成功", nil)
|
||||
}
|
||||
|
||||
// AssignToRole 为角色分配存储策略
|
||||
// POST /api/admin/storage-assignments/role
|
||||
func (c *StorageAssignController) AssignToRole(ctx *gin.Context) {
|
||||
var req dto.StorageAssignRequest
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.BadRequest(ctx, "参数错误: "+err.Error())
|
||||
return
|
||||
}
|
||||
if req.GroupID == 0 {
|
||||
utils.BadRequest(ctx, "请指定角色")
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.assignService.AssignToRole(req.GroupID, req.PolicyID, req.StorageQuota, req.Priority, req.AccessMode); err != nil {
|
||||
utils.ServerError(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
utils.SuccessWithMessage(ctx, "分配成功", nil)
|
||||
}
|
||||
|
||||
// UpdateAssignment 更新分配规则(配额/优先级/访问模式)
|
||||
// PUT /api/admin/storage-assignments/:id
|
||||
func (c *StorageAssignController) UpdateAssignment(ctx *gin.Context) {
|
||||
id, err := strconv.ParseUint(ctx.Param("id"), 10, 64)
|
||||
if err != nil {
|
||||
utils.BadRequest(ctx, "无效的ID")
|
||||
return
|
||||
}
|
||||
|
||||
var req struct {
|
||||
PolicyID uint64 `json:"policy_id"`
|
||||
Priority *int `json:"priority"`
|
||||
StorageQuota *int64 `json:"storage_quota"`
|
||||
AccessMode string `json:"access_mode"`
|
||||
}
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.BadRequest(ctx, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.assignService.UpdateAssignment(id, req.PolicyID, req.Priority, req.StorageQuota, req.AccessMode); err != nil {
|
||||
utils.BadRequest(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
utils.SuccessWithMessage(ctx, "更新成功", nil)
|
||||
}
|
||||
|
||||
// DeleteAssignment 删除分配规则
|
||||
// DELETE /api/admin/storage-assignments/:id
|
||||
func (c *StorageAssignController) DeleteAssignment(ctx *gin.Context) {
|
||||
id, err := strconv.ParseUint(ctx.Param("id"), 10, 64)
|
||||
if err != nil {
|
||||
utils.BadRequest(ctx, "无效的ID")
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.assignService.DeleteAssignment(id); err != nil {
|
||||
utils.BadRequest(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
utils.SuccessWithMessage(ctx, "删除成功", nil)
|
||||
}
|
||||
Reference in New Issue
Block a user