0001_identity_foundation.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import sqlalchemy as sa
  2. from alembic import op
  3. from sqlalchemy.dialects import mysql
  4. revision = "0001_identity_foundation"
  5. down_revision = None
  6. branch_labels = None
  7. depends_on = None
  8. def upgrade():
  9. op.create_table(
  10. "tenants",
  11. sa.Column("id", mysql.BINARY(16), nullable=False),
  12. sa.Column("name", sa.String(128), nullable=False),
  13. sa.Column("status", sa.String(32), nullable=False, server_default="ACTIVE"),
  14. sa.Column("version", mysql.BIGINT(unsigned=True), nullable=False, server_default="1"),
  15. sa.Column(
  16. "created_at",
  17. mysql.DATETIME(fsp=6),
  18. nullable=False,
  19. server_default=sa.text("CURRENT_TIMESTAMP(6)"),
  20. ),
  21. sa.Column(
  22. "updated_at",
  23. mysql.DATETIME(fsp=6),
  24. nullable=False,
  25. server_default=sa.text("CURRENT_TIMESTAMP(6)"),
  26. ),
  27. sa.PrimaryKeyConstraint("id", name="pk_tenants"),
  28. sa.CheckConstraint("status IN ('ACTIVE', 'SUSPENDED')", name=op.f("ck_tenants_status")),
  29. mysql_charset="utf8mb4",
  30. mysql_collate="utf8mb4_0900_ai_ci",
  31. )
  32. op.create_table(
  33. "stores",
  34. sa.Column("id", mysql.BINARY(16), nullable=False),
  35. sa.Column("tenant_id", mysql.BINARY(16), nullable=False),
  36. sa.Column("name", sa.String(128), nullable=False),
  37. sa.Column("status", sa.String(32), nullable=False, server_default="ACTIVE"),
  38. sa.Column("version", mysql.BIGINT(unsigned=True), nullable=False, server_default="1"),
  39. sa.Column(
  40. "created_at",
  41. mysql.DATETIME(fsp=6),
  42. nullable=False,
  43. server_default=sa.text("CURRENT_TIMESTAMP(6)"),
  44. ),
  45. sa.Column(
  46. "updated_at",
  47. mysql.DATETIME(fsp=6),
  48. nullable=False,
  49. server_default=sa.text("CURRENT_TIMESTAMP(6)"),
  50. ),
  51. sa.PrimaryKeyConstraint("id", name="pk_stores"),
  52. sa.UniqueConstraint("tenant_id", "id", name="uq_stores_tenant_id_id"),
  53. sa.ForeignKeyConstraint(["tenant_id"], ["tenants.id"], name="fk_stores_tenant_id_tenants"),
  54. sa.CheckConstraint("status IN ('ACTIVE', 'SUSPENDED')", name=op.f("ck_stores_status")),
  55. mysql_charset="utf8mb4",
  56. mysql_collate="utf8mb4_0900_ai_ci",
  57. )
  58. def downgrade():
  59. op.drop_table("stores")
  60. op.drop_table("tenants")