128 lines
4.5 KiB
Go
128 lines
4.5 KiB
Go
package db
|
|
|
|
import (
|
|
"time"
|
|
|
|
jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types"
|
|
"gorm.io/gorm/clause"
|
|
)
|
|
|
|
type PinnedObjectDB struct {
|
|
*DB
|
|
}
|
|
|
|
func (db *DB) PinnedObject() *PinnedObjectDB {
|
|
return &PinnedObjectDB{DB: db}
|
|
}
|
|
|
|
func (*PinnedObjectDB) GetByUserSpaceID(ctx SQLContext, spaceID jcstypes.UserSpaceID) ([]jcstypes.PinnedObject, error) {
|
|
var ret []jcstypes.PinnedObject
|
|
err := ctx.Table("PinnedObject").Find(&ret, "UserSpaceID = ?", spaceID).Error
|
|
return ret, err
|
|
}
|
|
|
|
func (*PinnedObjectDB) GetObjectsByUserSpaceID(ctx SQLContext, spaceID jcstypes.UserSpaceID) ([]jcstypes.Object, error) {
|
|
var ret []jcstypes.Object
|
|
err := ctx.Table("Object").Joins("inner join PinnedObject on Object.ObjectID = PinnedObject.ObjectID").Where("UserSpaceID = ?", spaceID).Find(&ret).Error
|
|
return ret, err
|
|
}
|
|
|
|
func (*PinnedObjectDB) Create(ctx SQLContext, spaceID jcstypes.UserSpaceID, objectID jcstypes.ObjectID, createTime time.Time) error {
|
|
return ctx.Table("PinnedObject").Create(&jcstypes.PinnedObject{UserSpaceID: spaceID, ObjectID: objectID, CreateTime: createTime}).Error
|
|
}
|
|
|
|
func (*PinnedObjectDB) BatchGetByObjectID(ctx SQLContext, objectIDs []jcstypes.ObjectID) ([]jcstypes.PinnedObject, error) {
|
|
if len(objectIDs) == 0 {
|
|
return nil, nil
|
|
}
|
|
|
|
var pinneds []jcstypes.PinnedObject
|
|
err := ctx.Table("PinnedObject").Where("ObjectID in (?)", objectIDs).Order("ObjectID asc").Find(&pinneds).Error
|
|
return pinneds, err
|
|
}
|
|
|
|
func (*PinnedObjectDB) TryCreate(ctx SQLContext, spaceID jcstypes.UserSpaceID, objectID jcstypes.ObjectID, createTime time.Time) error {
|
|
return ctx.Clauses(clause.OnConflict{
|
|
Columns: []clause.Column{{Name: "ObjectID"}, {Name: "UserSpaceID"}},
|
|
DoUpdates: clause.AssignmentColumns([]string{"CreateTime"}),
|
|
}).Create(&jcstypes.PinnedObject{UserSpaceID: spaceID, ObjectID: objectID, CreateTime: createTime}).Error
|
|
}
|
|
|
|
func (*PinnedObjectDB) BatchTryCreate(ctx SQLContext, pinneds []jcstypes.PinnedObject) error {
|
|
if len(pinneds) == 0 {
|
|
return nil
|
|
}
|
|
|
|
return ctx.Clauses(clause.OnConflict{
|
|
Columns: []clause.Column{{Name: "ObjectID"}, {Name: "UserSpaceID"}},
|
|
DoUpdates: clause.AssignmentColumns([]string{"CreateTime"}),
|
|
}).Create(&pinneds).Error
|
|
}
|
|
|
|
func (*PinnedObjectDB) CreateFromPackage(ctx SQLContext, packageID jcstypes.PackageID, spaceID jcstypes.UserSpaceID) error {
|
|
err := ctx.Exec(
|
|
"insert ignore into PinnedObject(UserSpaceID, ObjectID, CreateTime) select ? as UserSpaceID, ObjectID, ? as CreateTime from Object where PackageID = ?",
|
|
spaceID,
|
|
time.Now(),
|
|
packageID,
|
|
).Error
|
|
return err
|
|
}
|
|
|
|
func (db *PinnedObjectDB) ObjectBatchCreate(ctx SQLContext, objectID jcstypes.ObjectID, spaceIDs []jcstypes.UserSpaceID) error {
|
|
if len(spaceIDs) == 0 {
|
|
return nil
|
|
}
|
|
|
|
for _, id := range spaceIDs {
|
|
err := db.TryCreate(ctx, id, objectID, time.Now())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (*PinnedObjectDB) Delete(ctx SQLContext, spaceID jcstypes.UserSpaceID, objectID jcstypes.ObjectID) error {
|
|
err := ctx.Exec("delete from PinnedObject where UserSpaceID = ? and ObjectID = ?", spaceID, objectID).Error
|
|
return err
|
|
}
|
|
|
|
func (*PinnedObjectDB) DeleteByObjectID(ctx SQLContext, objectID jcstypes.ObjectID) error {
|
|
err := ctx.Exec("delete from PinnedObject where ObjectID = ?", objectID).Error
|
|
return err
|
|
}
|
|
|
|
func (*PinnedObjectDB) DeleteByUserSpaceID(ctx SQLContext, spaceID jcstypes.UserSpaceID) error {
|
|
err := ctx.Exec("delete from PinnedObject where UserSpaceID = ?", spaceID).Error
|
|
return err
|
|
}
|
|
|
|
func (*PinnedObjectDB) BatchDeleteByObjectID(ctx SQLContext, objectIDs []jcstypes.ObjectID) error {
|
|
if len(objectIDs) == 0 {
|
|
return nil
|
|
}
|
|
|
|
err := ctx.Table("PinnedObject").Where("ObjectID in (?)", objectIDs).Delete(&jcstypes.PinnedObject{}).Error
|
|
return err
|
|
}
|
|
|
|
func (*PinnedObjectDB) DeleteInPackage(ctx SQLContext, packageID jcstypes.PackageID) error {
|
|
err := ctx.Table("PinnedObject").Where("ObjectID in (select ObjectID from Object where PackageID = ?)", packageID).Delete(&jcstypes.PinnedObject{}).Error
|
|
return err
|
|
}
|
|
|
|
func (*PinnedObjectDB) DeleteInPackageAtStorage(ctx SQLContext, packageID jcstypes.PackageID, spaceID jcstypes.UserSpaceID) error {
|
|
err := ctx.Exec("delete PinnedObject from PinnedObject inner join Object on PinnedObject.ObjectID = Object.ObjectID where PackageID = ? and UserSpaceID = ?", packageID, spaceID).Error
|
|
return err
|
|
}
|
|
|
|
func (*PinnedObjectDB) BatchDelete(ctx SQLContext, spaceID jcstypes.UserSpaceID, objectIDs []jcstypes.ObjectID) error {
|
|
if len(objectIDs) == 0 {
|
|
return nil
|
|
}
|
|
|
|
err := ctx.Table("PinnedObject").Where("UserSpaceID = ? and ObjectID in (?)", spaceID, objectIDs).Delete(&jcstypes.PinnedObject{}).Error
|
|
return err
|
|
}
|