promo_code_usage.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package schema
  2. import (
  3. "time"
  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. // PromoCodeUsage holds the schema definition for the PromoCodeUsage entity.
  13. //
  14. // 优惠码使用记录:记录每个用户使用优惠码的情况
  15. type PromoCodeUsage struct {
  16. ent.Schema
  17. }
  18. func (PromoCodeUsage) Annotations() []schema.Annotation {
  19. return []schema.Annotation{
  20. entsql.Annotation{Table: "promo_code_usages"},
  21. }
  22. }
  23. func (PromoCodeUsage) Fields() []ent.Field {
  24. return []ent.Field{
  25. field.Int64("promo_code_id").
  26. Comment("优惠码ID"),
  27. field.Int64("user_id").
  28. Comment("使用用户ID"),
  29. field.Float("bonus_amount").
  30. SchemaType(map[string]string{dialect.Postgres: "decimal(20,8)"}).
  31. Comment("实际赠送金额"),
  32. field.Time("used_at").
  33. Default(time.Now).
  34. SchemaType(map[string]string{dialect.Postgres: "timestamptz"}).
  35. Comment("使用时间"),
  36. }
  37. }
  38. func (PromoCodeUsage) Edges() []ent.Edge {
  39. return []ent.Edge{
  40. edge.From("promo_code", PromoCode.Type).
  41. Ref("usage_records").
  42. Field("promo_code_id").
  43. Required().
  44. Unique(),
  45. edge.From("user", User.Type).
  46. Ref("promo_code_usages").
  47. Field("user_id").
  48. Required().
  49. Unique(),
  50. }
  51. }
  52. func (PromoCodeUsage) Indexes() []ent.Index {
  53. return []ent.Index{
  54. index.Fields("promo_code_id"),
  55. index.Fields("user_id"),
  56. // 每个用户每个优惠码只能使用一次
  57. index.Fields("promo_code_id", "user_id").Unique(),
  58. }
  59. }