package db import ( "database/sql" "fmt" "github.com/jmoiron/sqlx" cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" "gitlink.org.cn/cloudream/storage/common/pkgs/db/model" ) type StorageDB struct { *DB } func (db *DB) Storage() *StorageDB { return &StorageDB{DB: db} } func (db *StorageDB) GetByID(ctx SQLContext, stgID cdssdk.StorageID) (model.Storage, error) { var stg model.Storage err := sqlx.Get(ctx, &stg, "select * from Storage where StorageID = ?", stgID) return stg, err } func (db *StorageDB) BatchGetAllStorageIDs(ctx SQLContext, start int, count int) ([]cdssdk.StorageID, error) { var ret []cdssdk.StorageID err := sqlx.Select(ctx, &ret, "select StorageID from Storage limit ?, ?", start, count) return ret, err } func (db *StorageDB) IsAvailable(ctx SQLContext, userID cdssdk.UserID, storageID cdssdk.StorageID) (bool, error) { var stgID int64 err := sqlx.Get(ctx, &stgID, "select Storage.StorageID from Storage, UserStorage where"+ " Storage.StorageID = ? and"+ " Storage.StorageID = UserStorage.StorageID and"+ " UserStorage.UserID = ?", storageID, userID) if err == sql.ErrNoRows { return false, nil } if err != nil { return false, fmt.Errorf("find storage failed, err: %w", err) } return true, nil } func (db *StorageDB) GetUserStorage(ctx SQLContext, userID cdssdk.UserID, storageID cdssdk.StorageID) (model.Storage, error) { var stg model.Storage err := sqlx.Get(ctx, &stg, "select Storage.* from UserStorage, Storage where UserID = ? and UserStorage.StorageID = ? and UserStorage.StorageID = Storage.StorageID", userID, storageID) return stg, err } func (db *StorageDB) GetUserStorageByName(ctx SQLContext, userID cdssdk.UserID, name string) (model.Storage, error) { var stg model.Storage err := sqlx.Get(ctx, &stg, "select Storage.* from UserStorage, Storage where UserID = ? and UserStorage.StorageID = Storage.StorageID and Storage.Name = ?", userID, name) return stg, err } func (db *StorageDB) ChangeState(ctx SQLContext, storageID cdssdk.StorageID, state string) error { _, err := ctx.Exec("update Storage set State = ? where StorageID = ?", state, storageID) return err }