0015_merchant.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import sqlalchemy as sa
  2. from alembic import op
  3. from sqlalchemy.dialects import mysql
  4. revision = "0015_merchant"
  5. down_revision = "0014_money_budget"
  6. branch_labels = None
  7. depends_on = None
  8. def upgrade():
  9. op.add_column("principals", sa.Column(
  10. "version", mysql.BIGINT(unsigned=True), nullable=False, server_default="1"
  11. ))
  12. op.add_column("conversations", sa.Column(
  13. "agent_release_version", mysql.BIGINT(unsigned=True), nullable=True
  14. ))
  15. op.add_column("agent_runs", sa.Column("release_snapshot", sa.JSON(), nullable=True))
  16. op.create_table(
  17. "staff_invitations",
  18. sa.Column("id", mysql.BINARY(16), primary_key=True),
  19. sa.Column("tenant_id", mysql.BINARY(16), nullable=False),
  20. sa.Column("store_id", mysql.BINARY(16), nullable=False),
  21. sa.Column("account", sa.String(128, collation="utf8mb4_bin"), nullable=False),
  22. sa.Column("role", sa.String(32), nullable=False),
  23. sa.Column("status", sa.String(16), nullable=False),
  24. sa.Column("created_by", mysql.BINARY(16), nullable=False),
  25. sa.Column("created_at", mysql.DATETIME(fsp=6), nullable=False),
  26. sa.ForeignKeyConstraint(["tenant_id", "store_id"], ["stores.tenant_id", "stores.id"]),
  27. sa.UniqueConstraint("tenant_id", "store_id", "account", name="uq_staff_invitation_account"),
  28. )
  29. op.create_table(
  30. "channel_applications",
  31. sa.Column("tenant_id", mysql.BINARY(16), primary_key=True),
  32. sa.Column("store_id", mysql.BINARY(16), primary_key=True),
  33. sa.Column("name", sa.String(128), nullable=False),
  34. sa.Column("callback_url", sa.String(2048), nullable=False),
  35. sa.Column("credential_env", sa.String(128), nullable=False),
  36. sa.Column("enabled", sa.Boolean(), nullable=False),
  37. sa.Column("version", mysql.BIGINT(unsigned=True), nullable=False),
  38. sa.Column("scopes", sa.JSON(), nullable=False),
  39. sa.Column("updated_at", mysql.DATETIME(fsp=6), nullable=False),
  40. sa.ForeignKeyConstraint(["tenant_id", "store_id"], ["stores.tenant_id", "stores.id"]),
  41. )
  42. op.create_table(
  43. "rule_drafts",
  44. sa.Column("tenant_id", mysql.BINARY(16), primary_key=True),
  45. sa.Column("store_id", mysql.BINARY(16), primary_key=True),
  46. sa.Column("version", mysql.BIGINT(unsigned=True), nullable=False),
  47. sa.Column("base_version", mysql.BIGINT(unsigned=True), nullable=False),
  48. sa.Column("window_days", sa.Integer(), nullable=False),
  49. sa.Column("product_types", sa.JSON(), nullable=False),
  50. sa.Column("citation", sa.String(2000), nullable=False),
  51. sa.Column("updated_at", mysql.DATETIME(fsp=6), nullable=False),
  52. sa.ForeignKeyConstraint(["tenant_id", "store_id"], ["stores.tenant_id", "stores.id"]),
  53. )
  54. op.create_table(
  55. "agent_releases",
  56. sa.Column("tenant_id", mysql.BINARY(16), primary_key=True),
  57. sa.Column("store_id", mysql.BINARY(16), primary_key=True),
  58. sa.Column("version", mysql.BIGINT(unsigned=True), primary_key=True),
  59. sa.Column("manifest", sa.JSON(), nullable=False),
  60. sa.Column("reason", sa.String(2000), nullable=False),
  61. sa.Column("published_by", mysql.BINARY(16), nullable=False),
  62. sa.Column("published_at", mysql.DATETIME(fsp=6), nullable=False),
  63. sa.ForeignKeyConstraint(["tenant_id", "store_id"], ["stores.tenant_id", "stores.id"]),
  64. )
  65. def downgrade():
  66. op.drop_table("agent_releases")
  67. op.drop_table("rule_drafts")
  68. op.drop_table("channel_applications")
  69. op.drop_table("staff_invitations")
  70. op.drop_column("agent_runs", "release_snapshot")
  71. op.drop_column("conversations", "agent_release_version")
  72. op.drop_column("principals", "version")