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 3.9 kB

7 months ago
7 months ago
7 months ago
7 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package http
  2. import (
  3. "fmt"
  4. "net/http"
  5. "time"
  6. "github.com/gin-gonic/gin"
  7. "gitlink.org.cn/cloudream/common/pkgs/logger"
  8. "gitlink.org.cn/cloudream/jcs-pub/client/internal/http/types"
  9. cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1"
  10. "gitlink.org.cn/cloudream/jcs-pub/common/ecode"
  11. "gorm.io/gorm"
  12. )
  13. type BucketService struct {
  14. *Server
  15. }
  16. func (s *Server) Bucket() *BucketService {
  17. return &BucketService{
  18. Server: s,
  19. }
  20. }
  21. func (s *BucketService) Get(ctx *gin.Context) {
  22. log := logger.WithField("HTTP", "Bucket.Get")
  23. var req cliapi.BucketGet
  24. if err := ctx.ShouldBindQuery(&req); err != nil {
  25. log.Warnf("binding query: %s", err.Error())
  26. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  27. return
  28. }
  29. bucket, err := s.svc.DB.Bucket().GetByID(s.svc.DB.DefCtx(), req.BucketID)
  30. if err != nil {
  31. log.Warnf("getting bucket by name: %s", err.Error())
  32. if err == gorm.ErrRecordNotFound {
  33. ctx.JSON(http.StatusOK, types.Failed(ecode.DataNotFound, "bucket not found"))
  34. return
  35. }
  36. ctx.JSON(http.StatusOK, types.FailedError(err))
  37. return
  38. }
  39. ctx.JSON(http.StatusOK, types.OK(cliapi.BucketGetResp{
  40. Bucket: bucket,
  41. }))
  42. }
  43. func (s *BucketService) GetByName(ctx *gin.Context) {
  44. log := logger.WithField("HTTP", "Bucket.GetByName")
  45. var req cliapi.BucketGetByName
  46. if err := ctx.ShouldBindQuery(&req); err != nil {
  47. log.Warnf("binding query: %s", err.Error())
  48. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  49. return
  50. }
  51. bucket, err := s.svc.BucketSvc().GetBucketByName(req.Name)
  52. if err != nil {
  53. log.Warnf("getting bucket by name: %s", err.Error())
  54. if err == gorm.ErrRecordNotFound {
  55. ctx.JSON(http.StatusOK, types.Failed(ecode.DataNotFound, "bucket not found"))
  56. return
  57. }
  58. ctx.JSON(http.StatusOK, types.FailedError(err))
  59. return
  60. }
  61. ctx.JSON(http.StatusOK, types.OK(cliapi.BucketGetByNameResp{
  62. Bucket: bucket,
  63. }))
  64. }
  65. func (s *BucketService) Create(ctx *gin.Context) {
  66. log := logger.WithField("HTTP", "Bucket.Create")
  67. var req cliapi.BucketCreate
  68. if err := ctx.ShouldBindJSON(&req); err != nil {
  69. log.Warnf("binding body: %s", err.Error())
  70. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  71. return
  72. }
  73. bucket, err := s.svc.BucketSvc().CreateBucket(req.Name, time.Now())
  74. if err != nil {
  75. log.Warnf("creating bucket: %s", err.Error())
  76. ctx.JSON(http.StatusOK, types.FailedError(err))
  77. return
  78. }
  79. ctx.JSON(http.StatusOK, types.OK(cliapi.BucketCreateResp{
  80. Bucket: bucket,
  81. }))
  82. }
  83. func (s *BucketService) Delete(ctx *gin.Context) {
  84. log := logger.WithField("HTTP", "Bucket.Delete")
  85. var req cliapi.BucketDelete
  86. if err := ctx.ShouldBindJSON(&req); err != nil {
  87. log.Warnf("binding body: %s", err.Error())
  88. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  89. return
  90. }
  91. if err := s.svc.BucketSvc().DeleteBucket(req.BucketID); err != nil {
  92. log.Warnf("deleting bucket: %s", err.Error())
  93. ctx.JSON(http.StatusOK, types.Failed(ecode.OperationFailed, "delete bucket types.Failed"))
  94. return
  95. }
  96. ctx.JSON(http.StatusOK, types.OK(nil))
  97. }
  98. func (s *BucketService) ListAll(ctx *gin.Context) {
  99. log := logger.WithField("HTTP", "Bucket.ListAll")
  100. var req cliapi.BucketListAll
  101. if err := ctx.ShouldBindQuery(&req); err != nil {
  102. log.Warnf("binding query: %s", err.Error())
  103. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  104. return
  105. }
  106. buckets, err := s.svc.BucketSvc().ListAllBuckets()
  107. if err != nil {
  108. log.Warnf("list all buckets: %s", err.Error())
  109. ctx.JSON(http.StatusOK, types.Failed(ecode.OperationFailed, fmt.Sprintf("list all buckets: %v", err)))
  110. return
  111. }
  112. ctx.JSON(http.StatusOK, types.OK(cliapi.BucketListAllResp{
  113. Buckets: buckets,
  114. }))
  115. }

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