import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import mysql revision = "0021_billing_statements" down_revision = "0020_knowledge_source_text" branch_labels = None depends_on = None def upgrade(): # 账单原文按批次保留;租户和来源唯一约束防止更换请求 UUID 后重复导入。 op.create_table( "billing_statements", 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("source_key", mysql.BINARY(32), nullable=False), sa.Column("payload", sa.JSON(), nullable=False), sa.Column("created_at", mysql.DATETIME(fsp=6), nullable=False), sa.ForeignKeyConstraint(["tenant_id"], ["tenants.id"], ondelete="CASCADE"), sa.UniqueConstraint("tenant_id", "source_key", name="uq_billing_statement_source"), ) op.create_index("ix_billing_statements_tenant_id", "billing_statements", ["tenant_id", "id"]) def downgrade(): op.drop_table("billing_statements")