auth_identity_channel.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package schema
  2. import (
  3. "github.com/Wei-Shaw/sub2api/ent/schema/mixins"
  4. "entgo.io/ent"
  5. "entgo.io/ent/dialect"
  6. "entgo.io/ent/dialect/entsql"
  7. "entgo.io/ent/schema"
  8. "entgo.io/ent/schema/edge"
  9. "entgo.io/ent/schema/field"
  10. "entgo.io/ent/schema/index"
  11. )
  12. // AuthIdentityChannel stores channel-scoped identifiers for a canonical identity.
  13. type AuthIdentityChannel struct {
  14. ent.Schema
  15. }
  16. func (AuthIdentityChannel) Annotations() []schema.Annotation {
  17. return []schema.Annotation{
  18. entsql.Annotation{Table: "auth_identity_channels"},
  19. }
  20. }
  21. func (AuthIdentityChannel) Mixin() []ent.Mixin {
  22. return []ent.Mixin{
  23. mixins.TimeMixin{},
  24. }
  25. }
  26. func (AuthIdentityChannel) Fields() []ent.Field {
  27. return []ent.Field{
  28. field.Int64("identity_id"),
  29. field.String("provider_type").
  30. MaxLen(20).
  31. NotEmpty().
  32. Validate(validateAuthProviderType),
  33. field.String("provider_key").
  34. NotEmpty().
  35. SchemaType(map[string]string{dialect.Postgres: "text"}),
  36. field.String("channel").
  37. MaxLen(20).
  38. NotEmpty(),
  39. field.String("channel_app_id").
  40. NotEmpty().
  41. SchemaType(map[string]string{dialect.Postgres: "text"}),
  42. field.String("channel_subject").
  43. NotEmpty().
  44. SchemaType(map[string]string{dialect.Postgres: "text"}),
  45. field.JSON("metadata", map[string]any{}).
  46. Default(func() map[string]any { return map[string]any{} }).
  47. SchemaType(map[string]string{dialect.Postgres: "jsonb"}),
  48. }
  49. }
  50. func (AuthIdentityChannel) Edges() []ent.Edge {
  51. return []ent.Edge{
  52. edge.From("identity", AuthIdentity.Type).
  53. Ref("channels").
  54. Field("identity_id").
  55. Required().
  56. Unique(),
  57. }
  58. }
  59. func (AuthIdentityChannel) Indexes() []ent.Index {
  60. return []ent.Index{
  61. index.Fields("provider_type", "provider_key", "channel", "channel_app_id", "channel_subject").Unique(),
  62. index.Fields("identity_id"),
  63. }
  64. }