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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package db
  2. import (
  3. "fmt"
  4. "time"
  5. jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types"
  6. "gorm.io/gorm"
  7. )
  8. type BucketDB struct {
  9. *DB
  10. }
  11. func (db *DB) Bucket() *BucketDB {
  12. return &BucketDB{DB: db}
  13. }
  14. func (db *BucketDB) GetByID(ctx SQLContext, bucketID jcstypes.BucketID) (jcstypes.Bucket, error) {
  15. var ret jcstypes.Bucket
  16. err := ctx.Table("Bucket").Where("BucketID = ?", bucketID).First(&ret).Error
  17. return ret, err
  18. }
  19. func (db *BucketDB) GetByName(ctx SQLContext, bucketName string) (jcstypes.Bucket, error) {
  20. var ret jcstypes.Bucket
  21. err := ctx.Table("Bucket").Where("Name = ?", bucketName).First(&ret).Error
  22. return ret, err
  23. }
  24. func (*BucketDB) GetAll(ctx SQLContext) ([]jcstypes.Bucket, error) {
  25. var ret []jcstypes.Bucket
  26. err := ctx.Table("Bucket").Find(&ret).Error
  27. return ret, err
  28. }
  29. func (db *BucketDB) Create(ctx SQLContext, bucketName string, createTime time.Time) (jcstypes.Bucket, error) {
  30. var bucketID int64
  31. err := ctx.Table("Bucket").
  32. Select("Bucket.BucketID").
  33. Where("Bucket.Name = ?", bucketName).
  34. Scan(&bucketID).Error
  35. if err != nil {
  36. return jcstypes.Bucket{}, err
  37. }
  38. if bucketID > 0 {
  39. return jcstypes.Bucket{}, gorm.ErrDuplicatedKey
  40. }
  41. newBucket := jcstypes.Bucket{Name: bucketName, CreateTime: createTime}
  42. if err := ctx.Table("Bucket").Create(&newBucket).Error; err != nil {
  43. return jcstypes.Bucket{}, fmt.Errorf("insert bucket failed, err: %w", err)
  44. }
  45. return newBucket, nil
  46. }
  47. func (db *BucketDB) Rename(ctx SQLContext, bucketID jcstypes.BucketID, bucketName string) error {
  48. return ctx.Table("Bucket").Where("BucketID = ?", bucketID).Update("Name", bucketName).Error
  49. }
  50. func (db *BucketDB) Delete(ctx SQLContext, bucketID jcstypes.BucketID) error {
  51. return ctx.Delete(&jcstypes.Bucket{}, "BucketID = ?", bucketID).Error
  52. }
  53. func (db *BucketDB) DeleteComplete(tx SQLContext, bucketID jcstypes.BucketID) error {
  54. pkgs, err := db.Package().GetBucketPackages(tx, bucketID)
  55. if err != nil {
  56. return err
  57. }
  58. for _, pkg := range pkgs {
  59. err := db.Package().DeleteComplete(tx, pkg.PackageID)
  60. if err != nil {
  61. return err
  62. }
  63. }
  64. return db.Bucket().Delete(tx, bucketID)
  65. }

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