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.

model.go 3.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package model
  2. import (
  3. "fmt"
  4. "reflect"
  5. "time"
  6. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  7. "gitlink.org.cn/cloudream/common/utils/serder"
  8. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  9. )
  10. // TODO 可以考虑逐步迁移到cdssdk中。迁移思路:数据对象应该包含的字段都迁移到cdssdk中,内部使用的一些特殊字段则留在这里
  11. type Storage = cdssdk.Storage
  12. type User struct {
  13. UserID cdssdk.UserID `gorm:"column:UserID; primaryKey; type:bigint" json:"userID"`
  14. Password string `gorm:"column:Password; type:varchar(255); not null" json:"password"`
  15. }
  16. func (User) TableName() string {
  17. return "User"
  18. }
  19. type UserBucket struct {
  20. UserID cdssdk.UserID `gorm:"column:UserID; primaryKey; type:bigint" json:"userID"`
  21. BucketID cdssdk.BucketID `gorm:"column:BucketID; primaryKey; type:bigint" json:"bucketID"`
  22. }
  23. func (UserBucket) TableName() string {
  24. return "UserBucket"
  25. }
  26. type UserNode struct {
  27. UserID cdssdk.UserID `gorm:"column:UserID; primaryKey; type:bigint" json:"userID"`
  28. NodeID cdssdk.NodeID `gorm:"column:NodeID; primaryKey; type:bigint" json:"nodeID"`
  29. }
  30. func (UserNode) TableName() string {
  31. return "UserNode"
  32. }
  33. type UserStorage struct {
  34. UserID cdssdk.UserID `gorm:"column:UserID; primaryKey; type:bigint" json:"userID"`
  35. StorageID cdssdk.StorageID `gorm:"column:StorageID; primaryKey; type:bigint" json:"storageID"`
  36. }
  37. func (UserStorage) TableName() string {
  38. return "UserStorage"
  39. }
  40. type Bucket = cdssdk.Bucket
  41. type Package = cdssdk.Package
  42. type Object = cdssdk.Object
  43. type NodeConnectivity = cdssdk.NodeConnectivity
  44. // 由于Object的Redundancy字段是interface,所以不能直接将查询结果scan成Object,必须先scan成TempObject,
  45. // 再.ToObject()转成Object
  46. type TempObject struct {
  47. cdssdk.Object
  48. Redundancy RedundancyWarpper `db:"Redundancy"`
  49. }
  50. func (o *TempObject) ToObject() cdssdk.Object {
  51. obj := o.Object
  52. obj.Redundancy = o.Redundancy.Value
  53. return obj
  54. }
  55. type RedundancyWarpper struct {
  56. Value cdssdk.Redundancy
  57. }
  58. func (o *RedundancyWarpper) Scan(src interface{}) error {
  59. data, ok := src.([]uint8)
  60. if !ok {
  61. return fmt.Errorf("unknow src type: %v", reflect.TypeOf(data))
  62. }
  63. red, err := serder.JSONToObjectEx[cdssdk.Redundancy](data)
  64. if err != nil {
  65. return err
  66. }
  67. o.Value = red
  68. return nil
  69. }
  70. type ObjectBlock = stgmod.ObjectBlock
  71. type Cache struct {
  72. FileHash cdssdk.FileHash `gorm:"column:FileHash; primaryKey; type: char(64)" json:"fileHash"`
  73. StorageID cdssdk.StorageID `gorm:"column:StorageID; primaryKey; type: bigint" json:"storageID"`
  74. CreateTime time.Time `gorm:"column:CreateTime; type:datetime" json:"createTime"`
  75. Priority int `gorm:"column:Priority; type:int" json:"priority"`
  76. }
  77. func (Cache) TableName() string {
  78. return "Cache"
  79. }
  80. const (
  81. StoragePackageStateNormal = "Normal"
  82. StoragePackageStateDeleted = "Deleted"
  83. StoragePackageStateOutdated = "Outdated"
  84. )
  85. // Storage当前加载的Package
  86. type StoragePackage struct {
  87. StorageID cdssdk.StorageID `gorm:"column:StorageID; primaryKey; type:bigint" json:"storageID"`
  88. PackageID cdssdk.PackageID `gorm:"column:PackageID; primaryKey; type:bigint" json:"packageID"`
  89. UserID cdssdk.UserID `gorm:"column:UserID; primaryKey; type:bigint" json:"userID"`
  90. State string `gorm:"column:State; type:varchar(255); not null" json:"state"`
  91. }
  92. func (StoragePackage) TableName() string {
  93. return "StoragePackage"
  94. }
  95. type Location struct {
  96. LocationID cdssdk.LocationID `gorm:"column:LocationID; primaryKey; type:bigint; autoIncrement" json:"locationID"`
  97. Name string `gorm:"column:Name; type:varchar(255); not null" json:"name"`
  98. }
  99. func (Location) TableName() string {
  100. return "Location"
  101. }

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