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

2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package mq
  2. import (
  3. "fmt"
  4. "gitlink.org.cn/cloudream/storage/common/pkgs/db2"
  5. "gitlink.org.cn/cloudream/common/consts/errorcode"
  6. "gitlink.org.cn/cloudream/common/pkgs/logger"
  7. "gitlink.org.cn/cloudream/common/pkgs/mq"
  8. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  9. "gitlink.org.cn/cloudream/storage/common/pkgs/db2/model"
  10. coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
  11. )
  12. func (svc *Service) GetBucket(userID cdssdk.UserID, bucketID cdssdk.BucketID) (model.Bucket, error) {
  13. // TODO
  14. panic("not implement yet")
  15. }
  16. func (svc *Service) GetBucketByName(msg *coormq.GetBucketByName) (*coormq.GetBucketByNameResp, *mq.CodeMessage) {
  17. bucket, err := svc.db2.Bucket().GetUserBucketByName(svc.db2.DefCtx(), msg.UserID, msg.Name)
  18. if err != nil {
  19. logger.WithField("UserID", msg.UserID).
  20. WithField("Name", msg.Name).
  21. Warnf("getting bucket by name: %s", err.Error())
  22. return nil, mq.Failed(errorcode.OperationFailed, "get bucket by name failed")
  23. }
  24. return mq.ReplyOK(coormq.RespGetBucketByName(bucket))
  25. }
  26. func (svc *Service) GetUserBuckets(msg *coormq.GetUserBuckets) (*coormq.GetUserBucketsResp, *mq.CodeMessage) {
  27. buckets, err := svc.db2.Bucket().GetUserBuckets(svc.db2.DefCtx(), msg.UserID)
  28. if err != nil {
  29. logger.WithField("UserID", msg.UserID).
  30. Warnf("get user buckets failed, err: %s", err.Error())
  31. return nil, mq.Failed(errorcode.OperationFailed, "get all buckets failed")
  32. }
  33. return mq.ReplyOK(coormq.NewGetUserBucketsResp(buckets))
  34. }
  35. func (svc *Service) GetBucketPackages(msg *coormq.GetBucketPackages) (*coormq.GetBucketPackagesResp, *mq.CodeMessage) {
  36. packages, err := svc.db2.Package().GetBucketPackages(svc.db2.DefCtx(), msg.UserID, msg.BucketID)
  37. if err != nil {
  38. logger.WithField("UserID", msg.UserID).
  39. WithField("BucketID", msg.BucketID).
  40. Warnf("get bucket packages failed, err: %s", err.Error())
  41. return nil, mq.Failed(errorcode.OperationFailed, "get bucket packages failed")
  42. }
  43. return mq.ReplyOK(coormq.NewGetBucketPackagesResp(packages))
  44. }
  45. func (svc *Service) CreateBucket(msg *coormq.CreateBucket) (*coormq.CreateBucketResp, *mq.CodeMessage) {
  46. var bucket cdssdk.Bucket
  47. err := svc.db2.DoTx(func(tx db2.SQLContext) error {
  48. _, err := svc.db2.User().GetByID(tx, msg.UserID)
  49. if err != nil {
  50. return fmt.Errorf("getting user by id: %w", err)
  51. }
  52. bucketID, err := svc.db2.Bucket().Create(tx, msg.UserID, msg.BucketName)
  53. if err != nil {
  54. return fmt.Errorf("creating bucket: %w", err)
  55. }
  56. bucket, err = svc.db2.Bucket().GetByID(tx, bucketID)
  57. if err != nil {
  58. return fmt.Errorf("getting bucket by id: %w", err)
  59. }
  60. return nil
  61. })
  62. if err != nil {
  63. logger.WithField("UserID", msg.UserID).
  64. WithField("BucketName", msg.BucketName).
  65. Warn(err.Error())
  66. return nil, mq.Failed(errorcode.OperationFailed, "create bucket failed")
  67. }
  68. return mq.ReplyOK(coormq.NewCreateBucketResp(bucket))
  69. }
  70. func (svc *Service) DeleteBucket(msg *coormq.DeleteBucket) (*coormq.DeleteBucketResp, *mq.CodeMessage) {
  71. err := svc.db2.DoTx(func(tx db2.SQLContext) error {
  72. isAvai, _ := svc.db2.Bucket().IsAvailable(tx, msg.BucketID, msg.UserID)
  73. if !isAvai {
  74. return fmt.Errorf("bucket is not avaiable to the user")
  75. }
  76. err := svc.db2.Bucket().Delete(tx, msg.BucketID)
  77. if err != nil {
  78. return fmt.Errorf("deleting bucket: %w", err)
  79. }
  80. return nil
  81. })
  82. if err != nil {
  83. logger.WithField("UserID", msg.UserID).
  84. WithField("BucketID", msg.BucketID).
  85. Warn(err.Error())
  86. return nil, mq.Failed(errorcode.OperationFailed, "delete bucket failed")
  87. }
  88. return mq.ReplyOK(coormq.NewDeleteBucketResp())
  89. }

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