package endpoints import ( "file-system/internal/api/handlers" "file-system/internal/api/requests" "file-system/internal/api/validators" "file-system/internal/common" "file-system/internal/infrastructure/mediator" "net/http" "github.com/gin-gonic/gin" ) type BucketEndpoint struct { Mediator *mediator.Mediator CreateBucketValidator *validators.CreateBucketValidator } func NewBucketEndpoint(m *mediator.Mediator, cbv *validators.CreateBucketValidator) *BucketEndpoint { return &BucketEndpoint{ Mediator: m, CreateBucketValidator: cbv, } } // CreateBucket godoc // @Summary 创建存储桶 // @Description 创建一个新的 S3 存储桶 // @Tags 存储桶管理 // @Accept json // @Produce json // @Param request body requests.CreateBucketRequest true "创建存储桶请求参数" // @Success 200 {object} map[string]string "创建成功消息" // @Failure 400 {object} map[string]string "参数错误" // @Failure 500 {object} map[string]string "服务器内部错误" // @Router /buckets [post] func (e *BucketEndpoint) CreateBucket(c *gin.Context) { var req requests.CreateBucketRequest if err := c.ShouldBind(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if err := e.CreateBucketValidator.Validate(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } cmd := handlers.CreateBucketCommand{BucketName: req.BucketName} result, err := mediator.Send[handlers.CreateBucketCommand, string](e.Mediator, c.Request.Context(), cmd) if err != nil { if be, ok := err.(*common.BusinessException); ok { c.JSON(be.Code, gin.H{"error": be.Message}) } else { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) } return } c.JSON(http.StatusOK, gin.H{"message": result}) } // ListBuckets godoc // @Summary 获取存储桶列表 // @Description 列出所有可用的 S3 存储桶 // @Tags 存储桶管理 // @Accept json // @Produce json // @Success 200 {object} map[string][]string "存储桶列表" // @Failure 500 {object} map[string]string "服务器内部错误" // @Router /buckets [get] func (e *BucketEndpoint) ListBuckets(c *gin.Context) { query := handlers.ListBucketsQuery{} result, err := mediator.Send[handlers.ListBucketsQuery, []string](e.Mediator, c.Request.Context(), query) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"buckets": result}) }