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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package db
  2. import (
  3. "fmt"
  4. "time"
  5. "gitlink.org.cn/cloudream/storage2/client/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 types.BucketID) (types.Bucket, error) {
  15. var ret types.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) (types.Bucket, error) {
  20. var ret types.Bucket
  21. err := ctx.Table("Bucket").Where("Name = ?", bucketName).First(&ret).Error
  22. return ret, err
  23. }
  24. // GetIDByName 根据BucketName查询BucketID
  25. func (db *BucketDB) GetIDByName(ctx SQLContext, bucketName string) (int64, error) {
  26. var result struct {
  27. BucketID int64 `gorm:"column:BucketID"`
  28. BucketName string `gorm:"column:BucketName"`
  29. }
  30. err := ctx.Table("Bucket").Select("BucketID, BucketName").Where("BucketName = ?", bucketName).Scan(&result).Error
  31. if err != nil {
  32. return 0, err
  33. }
  34. return result.BucketID, nil
  35. }
  36. func (*BucketDB) GetAll(ctx SQLContext) ([]types.Bucket, error) {
  37. var ret []types.Bucket
  38. err := ctx.Table("Bucket").Find(&ret).Error
  39. return ret, err
  40. }
  41. func (*BucketDB) GetUserBuckets(ctx SQLContext) ([]types.Bucket, error) {
  42. var ret []types.Bucket
  43. err := ctx.Table("Bucket").Find(&ret).Error
  44. return ret, err
  45. }
  46. func (db *BucketDB) Create(ctx SQLContext, bucketName string, createTime time.Time) (types.Bucket, error) {
  47. var bucketID int64
  48. err := ctx.Table("Bucket").
  49. Select("Bucket.BucketID").
  50. Where("Bucket.Name = ?", bucketName).
  51. Scan(&bucketID).Error
  52. if err != nil {
  53. return types.Bucket{}, err
  54. }
  55. if bucketID > 0 {
  56. return types.Bucket{}, gorm.ErrDuplicatedKey
  57. }
  58. newBucket := types.Bucket{Name: bucketName, CreateTime: createTime}
  59. if err := ctx.Table("Bucket").Create(&newBucket).Error; err != nil {
  60. return types.Bucket{}, fmt.Errorf("insert bucket failed, err: %w", err)
  61. }
  62. return newBucket, nil
  63. }
  64. func (db *BucketDB) Rename(ctx SQLContext, bucketID types.BucketID, bucketName string) error {
  65. return ctx.Table("Bucket").Where("BucketID = ?", bucketID).Update("Name", bucketName).Error
  66. }
  67. func (db *BucketDB) Delete(ctx SQLContext, bucketID types.BucketID) error {
  68. return ctx.Delete(&types.Bucket{}, "BucketID = ?", bucketID).Error
  69. }
  70. func (db *BucketDB) DeleteComplete(tx SQLContext, bucketID types.BucketID) error {
  71. pkgs, err := db.Package().GetBucketPackages(tx, bucketID)
  72. if err != nil {
  73. return err
  74. }
  75. for _, pkg := range pkgs {
  76. err := db.Package().DeleteComplete(tx, pkg.PackageID)
  77. if err != nil {
  78. return err
  79. }
  80. }
  81. return db.Bucket().Delete(tx, bucketID)
  82. }

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