20260730_06_add_demand_feedback.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. """add demand summary feedback records
  2. Revision ID: 20260730_06
  3. Revises: 20260730_05
  4. Create Date: 2026-07-30
  5. """
  6. from __future__ import annotations
  7. from collections.abc import Sequence
  8. import sqlalchemy as sa
  9. from alembic import op
  10. revision: str = "20260730_06"
  11. down_revision: str | None = "20260730_05"
  12. branch_labels: str | Sequence[str] | None = None
  13. depends_on: str | Sequence[str] | None = None
  14. def upgrade() -> None:
  15. op.create_table(
  16. "demand_feedback",
  17. sa.Column("id", sa.BigInteger(), autoincrement=True, nullable=False),
  18. sa.Column("client_request_id", sa.String(length=64), nullable=False),
  19. sa.Column(
  20. "target_type",
  21. sa.String(length=32),
  22. nullable=False,
  23. comment="反馈对象:demand / video / hit_content",
  24. ),
  25. sa.Column("biz_dt", sa.String(length=32), nullable=False),
  26. sa.Column("demand_grade_id", sa.BigInteger(), nullable=False),
  27. sa.Column("video_id", sa.String(length=64), nullable=True),
  28. sa.Column("demand_video_expansion_id", sa.BigInteger(), nullable=True),
  29. sa.Column("feedback_action", sa.String(length=32), nullable=False),
  30. sa.Column("reason_code", sa.String(length=64), nullable=True),
  31. sa.Column("content", sa.Text(), nullable=True),
  32. sa.Column("target_snapshot_json", sa.Text(), nullable=False),
  33. sa.Column("feedback_user_id", sa.Integer(), nullable=False),
  34. sa.Column(
  35. "feedback_user_name_snapshot",
  36. sa.String(length=128),
  37. nullable=False,
  38. ),
  39. sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
  40. sa.Column("updated_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
  41. sa.PrimaryKeyConstraint("id"),
  42. sa.UniqueConstraint(
  43. "client_request_id",
  44. name="uk_demand_feedback_request",
  45. ),
  46. mysql_charset="utf8mb4",
  47. )
  48. op.create_index(
  49. "idx_demand_feedback_demand",
  50. "demand_feedback",
  51. ["demand_grade_id", "created_at"],
  52. )
  53. op.create_index(
  54. "idx_demand_feedback_video",
  55. "demand_feedback",
  56. ["demand_grade_id", "video_id", "created_at"],
  57. )
  58. op.create_index(
  59. "idx_demand_feedback_expansion",
  60. "demand_feedback",
  61. ["demand_video_expansion_id", "created_at"],
  62. )
  63. op.create_index(
  64. "idx_demand_feedback_user",
  65. "demand_feedback",
  66. ["feedback_user_id", "created_at"],
  67. )
  68. def downgrade() -> None:
  69. op.drop_index("idx_demand_feedback_user", table_name="demand_feedback")
  70. op.drop_index("idx_demand_feedback_expansion", table_name="demand_feedback")
  71. op.drop_index("idx_demand_feedback_video", table_name="demand_feedback")
  72. op.drop_index("idx_demand_feedback_demand", table_name="demand_feedback")
  73. op.drop_table("demand_feedback")