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_package.go 4.3 kB

2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package db
  2. /*
  3. import (
  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 StoragePackageDB struct {
  10. *DB
  11. }
  12. func (db *DB) StoragePackage() *StoragePackageDB {
  13. return &StoragePackageDB{DB: db}
  14. }
  15. func (*StoragePackageDB) Get(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID) (model.StoragePackage, error) {
  16. var ret model.StoragePackage
  17. err := sqlx.Get(ctx, &ret, "select * from StoragePackage where StorageID = ? and PackageID = ? and UserID = ?", storageID, packageID, userID)
  18. return ret, err
  19. }
  20. func (*StoragePackageDB) GetAllByStorageAndPackageID(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID) ([]model.StoragePackage, error) {
  21. var ret []model.StoragePackage
  22. err := sqlx.Select(ctx, &ret, "select * from StoragePackage where StorageID = ? and PackageID = ?", storageID, packageID)
  23. return ret, err
  24. }
  25. func (*StoragePackageDB) GetAllByStorageID(ctx SQLContext, storageID cdssdk.StorageID) ([]model.StoragePackage, error) {
  26. var ret []model.StoragePackage
  27. err := sqlx.Select(ctx, &ret, "select * from StoragePackage where StorageID = ?", storageID)
  28. return ret, err
  29. }
  30. func (*StoragePackageDB) CreateOrUpdate(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID) error {
  31. _, err := ctx.Exec("insert into StoragePackage values(?,?,?,?)"+
  32. " on duplicate key update State=values(State)", storageID, packageID, userID, model.StoragePackageStateNormal)
  33. return err
  34. }
  35. func (*StoragePackageDB) ChangeState(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID, state string) error {
  36. _, err := ctx.Exec("update StoragePackage set State = ? where StorageID = ? and PackageID = ? and UserID = ?", state, storageID, packageID, userID)
  37. return err
  38. }
  39. // SetStateNormal 将状态设置为Normal,如果记录状态是Deleted,则不进行操作
  40. func (*StoragePackageDB) SetStateNormal(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID) error {
  41. _, err := ctx.Exec("update StoragePackage set State = ? where StorageID = ? and PackageID = ? and UserID = ? and State <> ?",
  42. model.StoragePackageStateNormal,
  43. storageID,
  44. packageID,
  45. userID,
  46. model.StoragePackageStateDeleted,
  47. )
  48. return err
  49. }
  50. func (*StoragePackageDB) SetAllPackageState(ctx SQLContext, packageID cdssdk.PackageID, state string) (int64, error) {
  51. ret, err := ctx.Exec(
  52. "update StoragePackage set State = ? where PackageID = ?",
  53. state,
  54. packageID,
  55. )
  56. if err != nil {
  57. return 0, err
  58. }
  59. cnt, err := ret.RowsAffected()
  60. if err != nil {
  61. return 0, fmt.Errorf("get affected rows failed, err: %w", err)
  62. }
  63. return cnt, nil
  64. }
  65. // SetAllPackageOutdated 将Storage中指定对象设置为已过期。
  66. // 注:只会设置Normal状态的对象
  67. func (*StoragePackageDB) SetAllPackageOutdated(ctx SQLContext, packageID cdssdk.PackageID) (int64, error) {
  68. ret, err := ctx.Exec(
  69. "update StoragePackage set State = ? where State = ? and PackageID = ?",
  70. model.StoragePackageStateOutdated,
  71. model.StoragePackageStateNormal,
  72. packageID,
  73. )
  74. if err != nil {
  75. return 0, err
  76. }
  77. cnt, err := ret.RowsAffected()
  78. if err != nil {
  79. return 0, fmt.Errorf("get affected rows failed, err: %w", err)
  80. }
  81. return cnt, nil
  82. }
  83. func (db *StoragePackageDB) SetAllPackageDeleted(ctx SQLContext, packageID cdssdk.PackageID) (int64, error) {
  84. return db.SetAllPackageState(ctx, packageID, model.StoragePackageStateDeleted)
  85. }
  86. func (*StoragePackageDB) Delete(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID) error {
  87. _, err := ctx.Exec("delete from StoragePackage where StorageID = ? and PackageID = ? and UserID = ?", storageID, packageID, userID)
  88. return err
  89. }
  90. // FindPackageStorages 查询存储了指定对象的Storage
  91. func (*StoragePackageDB) FindPackageStorages(ctx SQLContext, packageID cdssdk.PackageID) ([]model.Storage, error) {
  92. var ret []model.Storage
  93. err := sqlx.Select(ctx, &ret,
  94. "select Storage.* from StoragePackage, Storage where PackageID = ? and"+
  95. " StoragePackage.StorageID = Storage.StorageID",
  96. packageID,
  97. )
  98. return ret, err
  99. }
  100. */

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