JCS-pub/client/internal/db/bucket.go

82 lines
2.1 KiB
Go

package db
import (
"fmt"
"time"
jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types"
"gorm.io/gorm"
)
type BucketDB struct {
*DB
}
func (db *DB) Bucket() *BucketDB {
return &BucketDB{DB: db}
}
func (db *BucketDB) GetByID(ctx SQLContext, bucketID jcstypes.BucketID) (jcstypes.Bucket, error) {
var ret jcstypes.Bucket
err := ctx.Table("Bucket").Where("BucketID = ?", bucketID).First(&ret).Error
return ret, err
}
func (db *BucketDB) GetByName(ctx SQLContext, bucketName string) (jcstypes.Bucket, error) {
var ret jcstypes.Bucket
err := ctx.Table("Bucket").Where("Name = ?", bucketName).First(&ret).Error
return ret, err
}
func (*BucketDB) GetAll(ctx SQLContext) ([]jcstypes.Bucket, error) {
var ret []jcstypes.Bucket
err := ctx.Table("Bucket").Find(&ret).Error
return ret, err
}
func (db *BucketDB) Create(ctx SQLContext, bucketName string, createTime time.Time) (jcstypes.Bucket, error) {
var bucketID int64
err := ctx.Table("Bucket").
Select("Bucket.BucketID").
Where("Bucket.Name = ?", bucketName).
Scan(&bucketID).Error
if err != nil {
return jcstypes.Bucket{}, err
}
if bucketID > 0 {
return jcstypes.Bucket{}, gorm.ErrDuplicatedKey
}
newBucket := jcstypes.Bucket{Name: bucketName, CreateTime: createTime}
if err := ctx.Table("Bucket").Create(&newBucket).Error; err != nil {
return jcstypes.Bucket{}, fmt.Errorf("insert bucket failed, err: %w", err)
}
return newBucket, nil
}
func (db *BucketDB) Rename(ctx SQLContext, bucketID jcstypes.BucketID, bucketName string) error {
return ctx.Table("Bucket").Where("BucketID = ?", bucketID).Update("Name", bucketName).Error
}
func (db *BucketDB) Delete(ctx SQLContext, bucketID jcstypes.BucketID) error {
return ctx.Delete(&jcstypes.Bucket{}, "BucketID = ?", bucketID).Error
}
func (db *BucketDB) DeleteComplete(tx SQLContext, bucketID jcstypes.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)
}