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

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

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