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.

pinned_object.go 3.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package db
  2. import (
  3. "time"
  4. "github.com/jmoiron/sqlx"
  5. "github.com/samber/lo"
  6. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  7. "gitlink.org.cn/cloudream/storage/common/pkgs/db/model"
  8. )
  9. type PinnedObjectDB struct {
  10. *DB
  11. }
  12. func (db *DB) PinnedObject() *PinnedObjectDB {
  13. return &PinnedObjectDB{DB: db}
  14. }
  15. func (*PinnedObjectDB) GetByNodeID(ctx SQLContext, nodeID cdssdk.NodeID) ([]cdssdk.PinnedObject, error) {
  16. var ret []cdssdk.PinnedObject
  17. err := sqlx.Select(ctx, &ret, "select * from PinnedObject where NodeID = ?", nodeID)
  18. return ret, err
  19. }
  20. func (*PinnedObjectDB) GetObjectsByNodeID(ctx SQLContext, nodeID cdssdk.NodeID) ([]cdssdk.Object, error) {
  21. var ret []model.TempObject
  22. err := sqlx.Select(ctx, &ret, "select Object.* from PinnedObject, Object where PinnedObject.ObjectID = Object.ObjectID and NodeID = ?", nodeID)
  23. return lo.Map(ret, func(o model.TempObject, idx int) cdssdk.Object { return o.ToObject() }), err
  24. }
  25. func (*PinnedObjectDB) Create(ctx SQLContext, nodeID cdssdk.NodeID, objectID cdssdk.ObjectID, createTime time.Time) error {
  26. _, err := ctx.Exec("insert into PinnedObject values(?,?,?)", nodeID, objectID, createTime)
  27. return err
  28. }
  29. func (*PinnedObjectDB) TryCreate(ctx SQLContext, nodeID cdssdk.NodeID, objectID cdssdk.ObjectID, createTime time.Time) error {
  30. _, err := ctx.Exec("insert ignore into PinnedObject values(?,?,?)", nodeID, objectID, createTime)
  31. return err
  32. }
  33. func (*PinnedObjectDB) CreateFromPackage(ctx SQLContext, packageID cdssdk.PackageID, nodeID cdssdk.NodeID) error {
  34. _, err := ctx.Exec(
  35. "insert ignore into PinnedObject(NodeID, ObjectID, CreateTime) select ? as NodeID, ObjectID, ? as CreateTime from Object where PackageID = ?",
  36. nodeID,
  37. time.Now(),
  38. packageID,
  39. )
  40. return err
  41. }
  42. func (db *PinnedObjectDB) ObjectBatchCreate(ctx SQLContext, objectID cdssdk.ObjectID, nodeIDs []cdssdk.NodeID) error {
  43. for _, id := range nodeIDs {
  44. err := db.TryCreate(ctx, id, objectID, time.Now())
  45. if err != nil {
  46. return err
  47. }
  48. }
  49. return nil
  50. }
  51. func (*PinnedObjectDB) Delete(ctx SQLContext, nodeID cdssdk.NodeID, objectID cdssdk.ObjectID) error {
  52. _, err := ctx.Exec("delete from PinnedObject where NodeID = ? and ObjectID = ?", nodeID, objectID)
  53. return err
  54. }
  55. func (*PinnedObjectDB) DeleteByObjectID(ctx SQLContext, objectID cdssdk.ObjectID) error {
  56. _, err := ctx.Exec("delete from PinnedObject where ObjectID = ?", objectID)
  57. return err
  58. }
  59. func (*PinnedObjectDB) DeleteInPackage(ctx SQLContext, packageID cdssdk.PackageID) error {
  60. _, err := ctx.Exec("delete PinnedObject from PinnedObject inner join Object on PinnedObject.ObjectID = Object.ObjectID where PackageID = ?", packageID)
  61. return err
  62. }
  63. func (*PinnedObjectDB) NodeBatchDelete(ctx SQLContext, nodeID cdssdk.NodeID, objectIDs []cdssdk.ObjectID) error {
  64. query, args, err := sqlx.In("delete from PinnedObject where NodeID = ? and ObjectID in (?)", objectIDs)
  65. if err != nil {
  66. return err
  67. }
  68. _, err = ctx.Exec(query, args...)
  69. return err
  70. }

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