mirror of
https://github.com/wgh136/nysoure.git
synced 2025-09-27 12:17:24 +00:00
143 lines
3.3 KiB
Go
143 lines
3.3 KiB
Go
package api
|
|
|
|
import (
|
|
"nysoure/server/model"
|
|
"nysoure/server/service"
|
|
"strconv"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
)
|
|
|
|
func handleCreateS3Storage(c fiber.Ctx) error {
|
|
var params service.CreateS3StorageParams
|
|
if err := c.Bind().JSON(¶ms); err != nil {
|
|
return model.NewRequestError("Invalid request body")
|
|
}
|
|
|
|
if params.Name == "" || params.EndPoint == "" || params.AccessKeyID == "" ||
|
|
params.SecretAccessKey == "" || params.BucketName == "" {
|
|
return model.NewRequestError("All fields are required")
|
|
}
|
|
|
|
if params.MaxSizeInMB <= 0 {
|
|
return model.NewRequestError("Max size must be greater than 0")
|
|
}
|
|
|
|
uid, ok := c.Locals("uid").(uint)
|
|
if !ok {
|
|
return model.NewUnAuthorizedError("You are not authorized to perform this action")
|
|
}
|
|
|
|
err := service.CreateS3Storage(uid, params)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.Status(fiber.StatusCreated).JSON(model.Response[any]{
|
|
Success: true,
|
|
Message: "S3 storage created successfully",
|
|
})
|
|
}
|
|
|
|
func handleCreateLocalStorage(c fiber.Ctx) error {
|
|
var params service.CreateLocalStorageParams
|
|
if err := c.Bind().JSON(¶ms); err != nil {
|
|
return model.NewRequestError("Invalid request body")
|
|
}
|
|
|
|
if params.Name == "" || params.Path == "" {
|
|
return model.NewRequestError("All fields are required")
|
|
}
|
|
|
|
if params.MaxSizeInMB <= 0 {
|
|
return model.NewRequestError("Max size must be greater than 0")
|
|
}
|
|
|
|
uid, ok := c.Locals("uid").(uint)
|
|
if !ok {
|
|
return model.NewUnAuthorizedError("You are not authorized to perform this action")
|
|
}
|
|
|
|
err := service.CreateLocalStorage(uid, params)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.Status(fiber.StatusCreated).JSON(model.Response[any]{
|
|
Success: true,
|
|
Message: "Local storage created successfully",
|
|
})
|
|
}
|
|
|
|
func handleListStorages(c fiber.Ctx) error {
|
|
storages, err := service.ListStorages()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if storages == nil {
|
|
storages = []model.StorageView{}
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(model.Response[*[]model.StorageView]{
|
|
Success: true,
|
|
Data: &storages,
|
|
Message: "Storages retrieved successfully",
|
|
})
|
|
}
|
|
|
|
func handleDeleteStorage(c fiber.Ctx) error {
|
|
idStr := c.Params("id")
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|
if err != nil {
|
|
return model.NewRequestError("Invalid storage ID")
|
|
}
|
|
|
|
uid, ok := c.Locals("uid").(uint)
|
|
if !ok {
|
|
return model.NewUnAuthorizedError("You are not authorized to perform this action")
|
|
}
|
|
|
|
err = service.DeleteStorage(uid, uint(id))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(model.Response[any]{
|
|
Success: true,
|
|
Message: "Storage deleted successfully",
|
|
})
|
|
}
|
|
|
|
func handleSetDefaultStorage(c fiber.Ctx) error {
|
|
idStr := c.Params("id")
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|
if err != nil {
|
|
return model.NewRequestError("Invalid storage ID")
|
|
}
|
|
|
|
uid, ok := c.Locals("uid").(uint)
|
|
if !ok {
|
|
return model.NewUnAuthorizedError("You are not authorized to perform this action")
|
|
}
|
|
|
|
err = service.SetDefaultStorage(uid, uint(id))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(model.Response[any]{
|
|
Success: true,
|
|
Message: "Default storage set successfully",
|
|
})
|
|
}
|
|
|
|
func AddStorageRoutes(r fiber.Router) {
|
|
s := r.Group("storage")
|
|
s.Post("/s3", handleCreateS3Storage)
|
|
s.Post("/local", handleCreateLocalStorage)
|
|
s.Get("/", handleListStorages)
|
|
s.Delete("/:id", handleDeleteStorage)
|
|
s.Put("/:id/default", handleSetDefaultStorage)
|
|
}
|