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.2 kB

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

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