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.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package http
  2. import (
  3. "net/http"
  4. "github.com/gin-gonic/gin"
  5. "gitlink.org.cn/cloudream/common/consts/errorcode"
  6. "gitlink.org.cn/cloudream/common/pkgs/logger"
  7. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  8. )
  9. // BucketService 用于处理与存储桶相关的HTTP请求
  10. type BucketService struct {
  11. *Server
  12. }
  13. // Bucket 返回BucketService的实例
  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 cdssdk.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.UserID, req.Name)
  28. if err != nil {
  29. log.Warnf("getting bucket by name: %s", err.Error())
  30. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get bucket by name failed"))
  31. return
  32. }
  33. ctx.JSON(http.StatusOK, OK(cdssdk.BucketGetByNameResp{
  34. Bucket: bucket,
  35. }))
  36. }
  37. func (s *BucketService) Create(ctx *gin.Context) {
  38. log := logger.WithField("HTTP", "Bucket.Create")
  39. var req cdssdk.BucketCreate
  40. if err := ctx.ShouldBindJSON(&req); err != nil {
  41. log.Warnf("binding body: %s", err.Error())
  42. // 绑定失败,返回错误信息
  43. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  44. return
  45. }
  46. bucket, err := s.svc.BucketSvc().CreateBucket(req.UserID, req.Name)
  47. if err != nil {
  48. log.Warnf("creating bucket: %s", err.Error())
  49. // 创建存储桶失败,返回错误信息
  50. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "create bucket failed"))
  51. return
  52. }
  53. // 创建存储桶成功,返回成功响应
  54. ctx.JSON(http.StatusOK, OK(cdssdk.BucketCreateResp{
  55. Bucket: bucket,
  56. }))
  57. }
  58. // Delete 删除指定的存储桶
  59. // ctx *gin.Context: Gin框架的上下文对象,用于处理HTTP请求和响应
  60. func (s *BucketService) Delete(ctx *gin.Context) {
  61. log := logger.WithField("HTTP", "Bucket.Delete")
  62. var req cdssdk.BucketDelete
  63. if err := ctx.ShouldBindJSON(&req); err != nil {
  64. log.Warnf("binding body: %s", err.Error())
  65. // 绑定失败,返回错误信息
  66. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  67. return
  68. }
  69. // 调用服务层方法,删除存储桶
  70. if err := s.svc.BucketSvc().DeleteBucket(req.UserID, req.BucketID); err != nil {
  71. log.Warnf("deleting bucket: %s", err.Error())
  72. // 删除存储桶失败,返回错误信息
  73. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "delete bucket failed"))
  74. return
  75. }
  76. // 删除存储桶成功,返回成功响应
  77. ctx.JSON(http.StatusOK, OK(nil))
  78. }
  79. func (s *BucketService) ListUserBuckets(ctx *gin.Context) {
  80. log := logger.WithField("HTTP", "Bucket.ListUserBuckets")
  81. var req cdssdk.BucketListUserBucketsReq
  82. if err := ctx.ShouldBindQuery(&req); err != nil {
  83. log.Warnf("binding query: %s", err.Error())
  84. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  85. return
  86. }
  87. buckets, err := s.svc.BucketSvc().GetUserBuckets(req.UserID)
  88. if err != nil {
  89. log.Warnf("getting user buckets: %s", err.Error())
  90. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get user buckets failed"))
  91. return
  92. }
  93. ctx.JSON(http.StatusOK, OK(cdssdk.BucketListUserBucketsResp{
  94. Buckets: buckets,
  95. }))
  96. }

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