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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package db2
  2. import (
  3. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  4. "gitlink.org.cn/cloudream/storage/common/pkgs/db2/model"
  5. )
  6. type StoragePackageDB struct {
  7. *DB
  8. }
  9. func (db *DB) StoragePackage() *StoragePackageDB {
  10. return &StoragePackageDB{DB: db}
  11. }
  12. func (*StoragePackageDB) Get(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID) (model.StoragePackage, error) {
  13. var ret model.StoragePackage
  14. err := ctx.Table("StoragePackage").Where("StorageID = ? AND PackageID = ? AND UserID = ?", storageID, packageID, userID).First(&ret).Error
  15. return ret, err
  16. }
  17. func (*StoragePackageDB) GetAllByStorageAndPackageID(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID) ([]model.StoragePackage, error) {
  18. var ret []model.StoragePackage
  19. err := ctx.Table("StoragePackage").Where("StorageID = ? AND PackageID = ?", storageID, packageID).Find(&ret).Error
  20. return ret, err
  21. }
  22. func (*StoragePackageDB) GetAllByStorageID(ctx SQLContext, storageID cdssdk.StorageID) ([]model.StoragePackage, error) {
  23. var ret []model.StoragePackage
  24. err := ctx.Table("StoragePackage").Where("StorageID = ?", storageID).Find(&ret).Error
  25. return ret, err
  26. }
  27. func (*StoragePackageDB) CreateOrUpdate(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID) error {
  28. sql := "INSERT INTO StoragePackage (StorageID, PackageID, UserID, State) VALUES (?, ?, ?, ?) " +
  29. "ON DUPLICATE KEY UPDATE State = VALUES(State)"
  30. return ctx.Exec(sql, storageID, packageID, userID, model.StoragePackageStateNormal).Error
  31. }
  32. func (*StoragePackageDB) ChangeState(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID, state string) error {
  33. return ctx.Table("StoragePackage").Where("StorageID = ? AND PackageID = ? AND UserID = ?", storageID, packageID, userID).Update("State", state).Error
  34. }
  35. // SetStateNormal 将状态设置为Normal,如果记录状态是Deleted,则不进行操作
  36. func (*StoragePackageDB) SetStateNormal(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID) error {
  37. return ctx.Table("StoragePackage").Where("StorageID = ? AND PackageID = ? AND UserID = ? AND State <> ?",
  38. storageID, packageID, userID, model.StoragePackageStateDeleted).Update("State", model.StoragePackageStateNormal).Error
  39. }
  40. func (*StoragePackageDB) SetAllPackageState(ctx SQLContext, packageID cdssdk.PackageID, state string) (int64, error) {
  41. ret := ctx.Table("StoragePackage").Where("PackageID = ?", packageID).Update("State", state)
  42. if err := ret.Error; err != nil {
  43. return 0, err
  44. }
  45. return ret.RowsAffected, nil
  46. }
  47. // SetAllPackageOutdated 将Storage中指定对象设置为已过期。只会设置Normal状态的对象
  48. func (*StoragePackageDB) SetAllPackageOutdated(ctx SQLContext, packageID cdssdk.PackageID) (int64, error) {
  49. ret := ctx.Table("StoragePackage").Where("State = ? AND PackageID = ?", model.StoragePackageStateNormal, packageID).Update("State", model.StoragePackageStateOutdated)
  50. if err := ret.Error; err != nil {
  51. return 0, err
  52. }
  53. return ret.RowsAffected, nil
  54. }
  55. func (db *StoragePackageDB) SetAllPackageDeleted(ctx SQLContext, packageID cdssdk.PackageID) (int64, error) {
  56. return db.SetAllPackageState(ctx, packageID, model.StoragePackageStateDeleted)
  57. }
  58. func (*StoragePackageDB) Delete(ctx SQLContext, storageID cdssdk.StorageID, packageID cdssdk.PackageID, userID cdssdk.UserID) error {
  59. return ctx.Table("StoragePackage").Where("StorageID = ? AND PackageID = ? AND UserID = ?", storageID, packageID, userID).Delete(&model.StoragePackage{}).Error
  60. }
  61. // FindPackageStorages 查询存储了指定对象的Storage
  62. func (*StoragePackageDB) FindPackageStorages(ctx SQLContext, packageID cdssdk.PackageID) ([]model.Storage, error) {
  63. var ret []model.Storage
  64. err := ctx.Table("StoragePackage").Select("Storage.*").
  65. Joins("JOIN Storage ON StoragePackage.StorageID = Storage.StorageID").
  66. Where("PackageID = ?", packageID).
  67. Scan(&ret).Error
  68. return ret, err
  69. }

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