| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import sqlalchemy as sa
- from alembic import op
- from sqlalchemy.dialects import mysql
- revision = "0014_money_budget"
- down_revision = "0013_token_budget"
- branch_labels = None
- depends_on = None
- def upgrade():
- op.create_table(
- "billing_grants",
- sa.Column("tenant_id", mysql.BINARY(16), primary_key=True),
- sa.Column("principal_id", mysql.BINARY(16), primary_key=True),
- sa.Column("permission", sa.String(32), primary_key=True),
- sa.ForeignKeyConstraint(
- ["tenant_id", "principal_id"],
- ["principals.tenant_id", "principals.id"],
- ondelete="CASCADE",
- ),
- )
- op.create_table(
- "billing_changes",
- sa.Column("id", mysql.BINARY(16), primary_key=True),
- sa.Column("tenant_id", mysql.BINARY(16), nullable=False),
- sa.Column("applicant_id", mysql.BINARY(16), nullable=False),
- sa.Column("reviewer_id", mysql.BINARY(16), nullable=True),
- sa.Column("payload", sa.JSON(), nullable=False),
- sa.Column("status", sa.String(16), nullable=False),
- sa.Column("version", mysql.BIGINT(unsigned=True), nullable=False),
- sa.Column("decision_reason", sa.String(1000), nullable=True),
- sa.Column("created_at", mysql.DATETIME(fsp=6), nullable=False),
- sa.Column("expires_at", mysql.DATETIME(fsp=6), nullable=False),
- sa.ForeignKeyConstraint(["tenant_id"], ["tenants.id"], ondelete="CASCADE"),
- sa.CheckConstraint("status IN ('PENDING','APPROVED','REJECTED')", name="status"),
- )
- op.create_index("ix_billing_changes_tenant_id", "billing_changes", ["tenant_id", "id"])
- op.create_table(
- "money_policies",
- sa.Column("tenant_id", mysql.BINARY(16), primary_key=True),
- sa.Column("daily_limit", mysql.BIGINT(unsigned=True), nullable=False),
- sa.Column("version", mysql.BIGINT(unsigned=True), nullable=False),
- sa.ForeignKeyConstraint(["tenant_id"], ["tenants.id"], ondelete="CASCADE"),
- )
- op.create_table(
- "billing_routes",
- sa.Column("tenant_id", mysql.BINARY(16), primary_key=True),
- sa.Column("route_key", mysql.BINARY(32), primary_key=True),
- sa.Column("price", sa.JSON(), nullable=False),
- sa.Column("version", mysql.BIGINT(unsigned=True), nullable=False),
- sa.ForeignKeyConstraint(["tenant_id"], ["tenants.id"], ondelete="CASCADE"),
- )
- op.create_table(
- "money_accounts",
- sa.Column("tenant_id", mysql.BINARY(16), primary_key=True),
- sa.Column("period", mysql.DATE(), primary_key=True),
- sa.Column("daily_limit", mysql.BIGINT(unsigned=True), nullable=False),
- sa.Column("reserved", mysql.BIGINT(unsigned=True), nullable=False),
- sa.Column("consumed", mysql.BIGINT(unsigned=True), nullable=False),
- sa.ForeignKeyConstraint(["tenant_id"], ["tenants.id"], ondelete="CASCADE"),
- )
- op.create_table(
- "money_entries",
- sa.Column("id", mysql.BINARY(16), primary_key=True),
- sa.Column("tenant_id", mysql.BINARY(16), nullable=False),
- sa.Column("period", mysql.DATE(), nullable=False),
- sa.Column("price", sa.JSON(), nullable=False),
- sa.Column("reserved", mysql.BIGINT(unsigned=True), nullable=False),
- sa.Column("charged", mysql.BIGINT(unsigned=True), nullable=True),
- sa.Column("status", sa.String(16), nullable=False),
- sa.Column("version", mysql.BIGINT(unsigned=True), nullable=False),
- sa.Column("basis", sa.String(32), nullable=True),
- sa.ForeignKeyConstraint(["id"], ["token_entries.id"], ondelete="CASCADE"),
- sa.ForeignKeyConstraint(
- ["tenant_id", "period"],
- ["money_accounts.tenant_id", "money_accounts.period"],
- ondelete="CASCADE",
- ),
- sa.CheckConstraint("status IN ('PENDING','UNKNOWN','SETTLED','RELEASED')", name="status"),
- )
- op.create_index("ix_money_entries_tenant_id", "money_entries", ["tenant_id", "id"])
- def downgrade():
- for table in (
- "money_entries",
- "money_accounts",
- "billing_routes",
- "money_policies",
- "billing_changes",
- "billing_grants",
- ):
- op.drop_table(table)
|