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
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package services
  2. import (
  3. "fmt"
  4. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  5. stgglb "gitlink.org.cn/cloudream/storage/common/globals"
  6. "gitlink.org.cn/cloudream/storage/common/pkgs/db/model"
  7. coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
  8. )
  9. type BucketService struct {
  10. *Service
  11. }
  12. func (svc *Service) BucketSvc() *BucketService {
  13. return &BucketService{Service: svc}
  14. }
  15. func (svc *BucketService) GetBucket(userID cdssdk.UserID, bucketID cdssdk.BucketID) (model.Bucket, error) {
  16. // TODO
  17. panic("not implement yet")
  18. }
  19. func (svc *BucketService) GetBucketByName(userID cdssdk.UserID, bucketName string) (model.Bucket, error) {
  20. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  21. if err != nil {
  22. return model.Bucket{}, fmt.Errorf("new coordinator client: %w", err)
  23. }
  24. defer stgglb.CoordinatorMQPool.Release(coorCli)
  25. resp, err := coorCli.GetBucketByName(coormq.ReqGetBucketByName(userID, bucketName))
  26. if err != nil {
  27. return model.Bucket{}, fmt.Errorf("get bucket by name failed, err: %w", err)
  28. }
  29. return resp.Bucket, nil
  30. }
  31. func (svc *BucketService) GetUserBuckets(userID cdssdk.UserID) ([]model.Bucket, error) {
  32. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  33. if err != nil {
  34. return nil, fmt.Errorf("new coordinator client: %w", err)
  35. }
  36. defer stgglb.CoordinatorMQPool.Release(coorCli)
  37. resp, err := coorCli.GetUserBuckets(coormq.NewGetUserBuckets(userID))
  38. if err != nil {
  39. return nil, fmt.Errorf("get user buckets failed, err: %w", err)
  40. }
  41. return resp.Buckets, nil
  42. }
  43. func (svc *BucketService) GetBucketPackages(userID cdssdk.UserID, bucketID cdssdk.BucketID) ([]model.Package, error) {
  44. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  45. if err != nil {
  46. return nil, fmt.Errorf("new coordinator client: %w", err)
  47. }
  48. defer stgglb.CoordinatorMQPool.Release(coorCli)
  49. resp, err := coorCli.GetBucketPackages(coormq.NewGetBucketPackages(userID, bucketID))
  50. if err != nil {
  51. return nil, fmt.Errorf("get bucket packages failed, err: %w", err)
  52. }
  53. return resp.Packages, nil
  54. }
  55. func (svc *BucketService) CreateBucket(userID cdssdk.UserID, bucketName string) (cdssdk.Bucket, error) {
  56. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  57. if err != nil {
  58. return cdssdk.Bucket{}, fmt.Errorf("new coordinator client: %w", err)
  59. }
  60. defer stgglb.CoordinatorMQPool.Release(coorCli)
  61. resp, err := coorCli.CreateBucket(coormq.NewCreateBucket(userID, bucketName))
  62. if err != nil {
  63. return cdssdk.Bucket{}, fmt.Errorf("creating bucket: %w", err)
  64. }
  65. return resp.Bucket, nil
  66. }
  67. func (svc *BucketService) DeleteBucket(userID cdssdk.UserID, bucketID cdssdk.BucketID) error {
  68. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  69. if err != nil {
  70. return fmt.Errorf("new coordinator client: %w", err)
  71. }
  72. defer stgglb.CoordinatorMQPool.Release(coorCli)
  73. _, err = coorCli.DeleteBucket(coormq.NewDeleteBucket(userID, bucketID))
  74. if err != nil {
  75. return fmt.Errorf("request to coordinator failed, err: %w", err)
  76. }
  77. return nil
  78. }

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