You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

bucket.go 2.9 kB

7 months ago
7 months ago
11 months ago
7 months ago
11 months ago
7 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package http
  2. import (
  3. "fmt"
  4. "net/http"
  5. "time"
  6. "github.com/gin-gonic/gin"
  7. "gitlink.org.cn/cloudream/common/consts/errorcode"
  8. "gitlink.org.cn/cloudream/common/pkgs/logger"
  9. cliapi "gitlink.org.cn/cloudream/storage2/client/sdk/api"
  10. )
  11. type BucketService struct {
  12. *Server
  13. }
  14. func (s *Server) Bucket() *BucketService {
  15. return &BucketService{
  16. Server: s,
  17. }
  18. }
  19. func (s *BucketService) GetByName(ctx *gin.Context) {
  20. log := logger.WithField("HTTP", "Bucket.GetByName")
  21. var req cliapi.BucketGetByName
  22. if err := ctx.ShouldBindQuery(&req); err != nil {
  23. log.Warnf("binding query: %s", err.Error())
  24. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  25. return
  26. }
  27. bucket, err := s.svc.BucketSvc().GetBucketByName(req.Name)
  28. if err != nil {
  29. log.Warnf("getting bucket by name: %s", err.Error())
  30. ctx.JSON(http.StatusOK, FailedError(err))
  31. return
  32. }
  33. ctx.JSON(http.StatusOK, OK(cliapi.BucketGetByNameResp{
  34. Bucket: bucket,
  35. }))
  36. }
  37. func (s *BucketService) Create(ctx *gin.Context) {
  38. log := logger.WithField("HTTP", "Bucket.Create")
  39. var req cliapi.BucketCreate
  40. if err := ctx.ShouldBindJSON(&req); err != nil {
  41. log.Warnf("binding body: %s", err.Error())
  42. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  43. return
  44. }
  45. bucket, err := s.svc.BucketSvc().CreateBucket(req.Name, time.Now())
  46. if err != nil {
  47. log.Warnf("creating bucket: %s", err.Error())
  48. ctx.JSON(http.StatusOK, FailedError(err))
  49. return
  50. }
  51. ctx.JSON(http.StatusOK, OK(cliapi.BucketCreateResp{
  52. Bucket: bucket,
  53. }))
  54. }
  55. func (s *BucketService) Delete(ctx *gin.Context) {
  56. log := logger.WithField("HTTP", "Bucket.Delete")
  57. var req cliapi.BucketDelete
  58. if err := ctx.ShouldBindJSON(&req); err != nil {
  59. log.Warnf("binding body: %s", err.Error())
  60. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  61. return
  62. }
  63. if err := s.svc.BucketSvc().DeleteBucket(req.BucketID); err != nil {
  64. log.Warnf("deleting bucket: %s", err.Error())
  65. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "delete bucket failed"))
  66. return
  67. }
  68. ctx.JSON(http.StatusOK, OK(nil))
  69. }
  70. func (s *BucketService) ListAll(ctx *gin.Context) {
  71. log := logger.WithField("HTTP", "Bucket.ListAll")
  72. var req cliapi.BucketListAll
  73. if err := ctx.ShouldBindQuery(&req); err != nil {
  74. log.Warnf("binding query: %s", err.Error())
  75. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  76. return
  77. }
  78. buckets, err := s.svc.BucketSvc().ListAllBuckets()
  79. if err != nil {
  80. log.Warnf("list all buckets: %s", err.Error())
  81. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, fmt.Sprintf("list all buckets: %v", err)))
  82. return
  83. }
  84. ctx.JSON(http.StatusOK, OK(cliapi.BucketListAllResp{
  85. Buckets: buckets,
  86. }))
  87. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。