|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package db2
-
- import (
- "errors"
- "fmt"
- "time"
-
- "gorm.io/gorm"
-
- cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
- "gitlink.org.cn/cloudream/storage2/common/pkgs/db2/model"
- )
-
- type BucketDB struct {
- *DB
- }
-
- func (db *DB) Bucket() *BucketDB {
- return &BucketDB{DB: db}
- }
-
- func (db *BucketDB) GetByID(ctx SQLContext, bucketID cdssdk.BucketID) (cdssdk.Bucket, error) {
- var ret cdssdk.Bucket
- err := ctx.Table("Bucket").Where("BucketID = ?", bucketID).First(&ret).Error
- return ret, err
- }
-
- func (db *BucketDB) GetByName(ctx SQLContext, bucketName string) (cdssdk.Bucket, error) {
- var ret cdssdk.Bucket
- err := ctx.Table("Bucket").Where("Name = ?", bucketName).First(&ret).Error
- return ret, err
- }
-
- // GetIDByName 根据BucketName查询BucketID
- func (db *BucketDB) GetIDByName(ctx SQLContext, bucketName string) (int64, error) {
- var result struct {
- BucketID int64 `gorm:"column:BucketID"`
- BucketName string `gorm:"column:BucketName"`
- }
-
- err := ctx.Table("Bucket").Select("BucketID, BucketName").Where("BucketName = ?", bucketName).Scan(&result).Error
- if err != nil {
- return 0, err
- }
-
- return result.BucketID, nil
- }
-
- func (*BucketDB) GetAll(ctx SQLContext) ([]cdssdk.Bucket, error) {
- var ret []cdssdk.Bucket
- err := ctx.Table("Bucket").Find(&ret).Error
- return ret, err
- }
-
- // IsAvailable 判断用户是否有指定Bucekt的权限
- func (db *BucketDB) IsAvailable(ctx SQLContext, bucketID cdssdk.BucketID, userID cdssdk.UserID) (bool, error) {
- _, err := db.GetUserBucket(ctx, userID, bucketID)
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return false, nil
- }
-
- if err != nil {
- return false, fmt.Errorf("find bucket failed, err: %w", err)
- }
-
- return true, nil
- }
-
- func (*BucketDB) GetUserBucket(ctx SQLContext, userID cdssdk.UserID, bucketID cdssdk.BucketID) (model.Bucket, error) {
- var ret model.Bucket
- err := ctx.Table("UserBucket").
- Select("Bucket.*").
- Joins("JOIN Bucket ON UserBucket.BucketID = Bucket.BucketID").
- Where("UserBucket.UserID = ? AND Bucket.BucketID = ?", userID, bucketID).
- First(&ret).Error
- return ret, err
- }
-
- func (*BucketDB) GetUserBucketByName(ctx SQLContext, userID cdssdk.UserID, bucketName string) (model.Bucket, error) {
- var ret model.Bucket
- err := ctx.Table("UserBucket").
- Select("Bucket.*").
- Joins("JOIN Bucket ON UserBucket.BucketID = Bucket.BucketID").
- Where("UserBucket.UserID = ? AND Bucket.Name = ?", userID, bucketName).
- First(&ret).Error
- return ret, err
- }
-
- func (*BucketDB) GetUserBuckets(ctx SQLContext, userID cdssdk.UserID) ([]model.Bucket, error) {
- var ret []model.Bucket
- err := ctx.Table("UserBucket").
- Select("Bucket.*").
- Joins("JOIN Bucket ON UserBucket.BucketID = Bucket.BucketID").
- Where("UserBucket.UserID = ?", userID).
- Find(&ret).Error
- return ret, err
- }
-
- func (db *BucketDB) Create(ctx SQLContext, userID cdssdk.UserID, bucketName string, createTime time.Time) (cdssdk.Bucket, error) {
- var bucketID int64
- err := ctx.Table("UserBucket").
- Select("Bucket.BucketID").
- Joins("JOIN Bucket ON UserBucket.BucketID = Bucket.BucketID").
- Where("UserBucket.UserID = ? AND Bucket.Name = ?", userID, bucketName).
- Scan(&bucketID).Error
-
- if err != nil {
- return cdssdk.Bucket{}, err
- }
-
- if bucketID > 0 {
- return cdssdk.Bucket{}, gorm.ErrDuplicatedKey
- }
-
- newBucket := cdssdk.Bucket{Name: bucketName, CreateTime: createTime, CreatorID: userID}
- if err := ctx.Table("Bucket").Create(&newBucket).Error; err != nil {
- return cdssdk.Bucket{}, fmt.Errorf("insert bucket failed, err: %w", err)
- }
-
- err = ctx.Table("UserBucket").Create(&model.UserBucket{UserID: userID, BucketID: newBucket.BucketID}).Error
- if err != nil {
- return cdssdk.Bucket{}, fmt.Errorf("insert user bucket: %w", err)
- }
-
- return newBucket, nil
- }
-
- func (db *BucketDB) Rename(ctx SQLContext, bucketID cdssdk.BucketID, bucketName string) error {
- return ctx.Table("Bucket").Where("BucketID = ?", bucketID).Update("Name", bucketName).Error
- }
-
- func (db *BucketDB) Delete(ctx SQLContext, bucketID cdssdk.BucketID) error {
- return ctx.Delete(&cdssdk.Bucket{}, "BucketID = ?", bucketID).Error
- }
-
- func (db *BucketDB) DeleteComplete(tx SQLContext, bucketID cdssdk.BucketID) error {
- pkgs, err := db.Package().GetBucketPackages(tx, bucketID)
- if err != nil {
- return err
- }
-
- for _, pkg := range pkgs {
- err := db.Package().DeleteComplete(tx, pkg.PackageID)
- if err != nil {
- return err
- }
- }
- return db.Bucket().Delete(tx, bucketID)
- }
|