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.

storage.go 2.2 kB

2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package db
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "github.com/jmoiron/sqlx"
  6. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  7. "gitlink.org.cn/cloudream/storage/common/pkgs/db/model"
  8. )
  9. type StorageDB struct {
  10. *DB
  11. }
  12. func (db *DB) Storage() *StorageDB {
  13. return &StorageDB{DB: db}
  14. }
  15. func (db *StorageDB) GetByID(ctx SQLContext, stgID cdssdk.StorageID) (model.Storage, error) {
  16. var stg model.Storage
  17. err := sqlx.Get(ctx, &stg, "select * from Storage where StorageID = ?", stgID)
  18. return stg, err
  19. }
  20. func (db *StorageDB) BatchGetAllStorageIDs(ctx SQLContext, start int, count int) ([]cdssdk.StorageID, error) {
  21. var ret []cdssdk.StorageID
  22. err := sqlx.Select(ctx, &ret, "select StorageID from Storage limit ?, ?", start, count)
  23. return ret, err
  24. }
  25. func (db *StorageDB) IsAvailable(ctx SQLContext, userID cdssdk.UserID, storageID cdssdk.StorageID) (bool, error) {
  26. var stgID int64
  27. err := sqlx.Get(ctx, &stgID,
  28. "select Storage.StorageID from Storage, UserStorage where"+
  29. " Storage.StorageID = ? and"+
  30. " Storage.StorageID = UserStorage.StorageID and"+
  31. " UserStorage.UserID = ?",
  32. storageID, userID)
  33. if err == sql.ErrNoRows {
  34. return false, nil
  35. }
  36. if err != nil {
  37. return false, fmt.Errorf("find storage failed, err: %w", err)
  38. }
  39. return true, nil
  40. }
  41. func (db *StorageDB) GetUserStorage(ctx SQLContext, userID cdssdk.UserID, storageID cdssdk.StorageID) (model.Storage, error) {
  42. var stg model.Storage
  43. err := sqlx.Get(ctx, &stg,
  44. "select Storage.* from UserStorage, Storage where UserID = ? and UserStorage.StorageID = ? and UserStorage.StorageID = Storage.StorageID",
  45. userID,
  46. storageID)
  47. return stg, err
  48. }
  49. func (db *StorageDB) GetUserStorageByName(ctx SQLContext, userID cdssdk.UserID, name string) (model.Storage, error) {
  50. var stg model.Storage
  51. err := sqlx.Get(ctx, &stg,
  52. "select Storage.* from UserStorage, Storage where UserID = ? and UserStorage.StorageID = Storage.StorageID and Storage.Name = ?",
  53. userID,
  54. name)
  55. return stg, err
  56. }
  57. func (db *StorageDB) ChangeState(ctx SQLContext, storageID cdssdk.StorageID, state string) error {
  58. _, err := ctx.Exec("update Storage set State = ? where StorageID = ?", state, storageID)
  59. return err
  60. }

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