Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

bson_model.go 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package models
  2. import (
  3. "time"
  4. "git.x2erp.com/qdy/go-base/ctx"
  5. "go.mongodb.org/mongo-driver/bson/primitive"
  6. )
  7. // IDType 泛型类型约束
  8. type IDType interface {
  9. string | primitive.ObjectID
  10. }
  11. // 泛型内部模型
  12. type bsonModel[T IDType] struct {
  13. ID T `bson:"_id,omitempty" json:"id,omitempty"`
  14. TenantId string `bson:"tenant_id,omitempty"`
  15. CreatedBy string `bson:"created_by,omitempty" json:"created_by,omitempty"`
  16. CreatedAt time.Time `bson:"created_at" json:"created_at"`
  17. UpdatedBy string `bson:"updated_by,omitempty" json:"updated_by,omitempty"`
  18. UpdatedAt time.Time `bson:"updated_at" json:"updated_at"`
  19. }
  20. // 保持原有的外部类型
  21. type BsonStringModel = bsonModel[string]
  22. type BsonObjectModel = bsonModel[primitive.ObjectID]
  23. // 创建新的 String 模型(自动生成ID)
  24. func NewStringIDModel(ctx ctx.RequestContext) BsonStringModel {
  25. return BsonStringModel{
  26. ID: primitive.NewObjectID().Hex(),
  27. TenantId: ctx.TenantID,
  28. CreatedAt: time.Now(),
  29. CreatedBy: ctx.UserID,
  30. UpdatedAt: time.Now(),
  31. UpdatedBy: ctx.UserID,
  32. }
  33. }
  34. // 创建新的 String 模型(自定义ID)
  35. func NewStringIDModelWithID(ctx ctx.RequestContext, id string) BsonStringModel {
  36. return BsonStringModel{
  37. ID: id,
  38. TenantId: ctx.TenantID,
  39. CreatedAt: time.Now(),
  40. CreatedBy: ctx.UserID,
  41. UpdatedAt: time.Now(),
  42. UpdatedBy: ctx.UserID,
  43. }
  44. }
  45. // 创建新的 ObjectID 模型(自动生成ID)
  46. func NewObjectIDModel(ctx ctx.RequestContext) BsonObjectModel {
  47. return BsonObjectModel{
  48. ID: primitive.NewObjectID(),
  49. TenantId: ctx.TenantID,
  50. CreatedAt: time.Now(),
  51. CreatedBy: ctx.UserID,
  52. UpdatedAt: time.Now(),
  53. UpdatedBy: ctx.UserID,
  54. }
  55. }
  56. // 用于更新操作的模型(只设置更新信息)
  57. func ModelForUpdate(ctx ctx.RequestContext) BsonStringModel {
  58. return BsonStringModel{
  59. UpdatedAt: time.Now(),
  60. UpdatedBy: ctx.UserID,
  61. }
  62. }