usage_cleanup_task.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package schema
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/Wei-Shaw/sub2api/ent/schema/mixins"
  6. "entgo.io/ent"
  7. "entgo.io/ent/dialect/entsql"
  8. "entgo.io/ent/schema"
  9. "entgo.io/ent/schema/field"
  10. "entgo.io/ent/schema/index"
  11. )
  12. // UsageCleanupTask 定义使用记录清理任务的 schema。
  13. type UsageCleanupTask struct {
  14. ent.Schema
  15. }
  16. func (UsageCleanupTask) Annotations() []schema.Annotation {
  17. return []schema.Annotation{
  18. entsql.Annotation{Table: "usage_cleanup_tasks"},
  19. }
  20. }
  21. func (UsageCleanupTask) Mixin() []ent.Mixin {
  22. return []ent.Mixin{
  23. mixins.TimeMixin{},
  24. }
  25. }
  26. func (UsageCleanupTask) Fields() []ent.Field {
  27. return []ent.Field{
  28. field.String("status").
  29. MaxLen(20).
  30. Validate(validateUsageCleanupStatus),
  31. field.JSON("filters", json.RawMessage{}),
  32. field.Int64("created_by"),
  33. field.Int64("deleted_rows").
  34. Default(0),
  35. field.String("error_message").
  36. Optional().
  37. Nillable(),
  38. field.Int64("canceled_by").
  39. Optional().
  40. Nillable(),
  41. field.Time("canceled_at").
  42. Optional().
  43. Nillable(),
  44. field.Time("started_at").
  45. Optional().
  46. Nillable(),
  47. field.Time("finished_at").
  48. Optional().
  49. Nillable(),
  50. }
  51. }
  52. func (UsageCleanupTask) Indexes() []ent.Index {
  53. return []ent.Index{
  54. index.Fields("status", "created_at"),
  55. index.Fields("created_at"),
  56. index.Fields("canceled_at"),
  57. }
  58. }
  59. func validateUsageCleanupStatus(status string) error {
  60. switch status {
  61. case "pending", "running", "succeeded", "failed", "canceled":
  62. return nil
  63. default:
  64. return fmt.Errorf("invalid usage cleanup status: %s", status)
  65. }
  66. }