"""形仪域_真形锚点_主仪化仪定相_声音档案与克隆授权 Revision ID: 008 Revises: 007 Create Date: 2026-08-27 20:15:34.665285 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision: str = '008' down_revision: Union[str, Sequence[str], None] = '007' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: """Upgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### op.create_table('form_anchors', sa.Column('id', sa.String(length=80), nullable=False), sa.Column('character_id', sa.String(length=80), nullable=False), sa.Column('features_json', sa.Text(), nullable=False), sa.Column('age_presentation', sa.String(length=40), nullable=False), sa.Column('permissions_json', sa.Text(), nullable=False), sa.Column('mutable_scope_json', sa.Text(), nullable=False), sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False), sa.ForeignKeyConstraint(['character_id'], ['characters.id'], ), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_form_anchors_character_id'), 'form_anchors', ['character_id'], unique=False) op.create_table('forms', sa.Column('id', sa.String(length=80), nullable=False), sa.Column('character_id', sa.String(length=80), nullable=False), sa.Column('kind', sa.String(length=20), nullable=False), sa.Column('status', sa.String(length=20), nullable=False), sa.Column('source', sa.String(length=20), nullable=False), sa.Column('description', sa.Text(), nullable=False), sa.Column('media_ref', sa.String(length=500), nullable=True), sa.Column('live2d_json', sa.Text(), nullable=False), sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), sa.Column('adopted_at', sa.DateTime(timezone=True), nullable=True), sa.ForeignKeyConstraint(['character_id'], ['characters.id'], ), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_forms_character_id'), 'forms', ['character_id'], unique=False) op.create_index(op.f('ix_forms_kind'), 'forms', ['kind'], unique=False) op.create_index(op.f('ix_forms_status'), 'forms', ['status'], unique=False) op.create_table('voice_profiles', sa.Column('id', sa.String(length=80), nullable=False), sa.Column('character_id', sa.String(length=80), nullable=False), sa.Column('source', sa.String(length=30), nullable=False), sa.Column('name', sa.String(length=120), nullable=False), sa.Column('params_json', sa.Text(), nullable=False), sa.Column('grant_purpose', sa.String(length=200), nullable=True), sa.Column('grant_expires_at', sa.DateTime(timezone=True), nullable=True), sa.Column('grant_distribution', sa.String(length=200), nullable=True), sa.Column('grant_revoked_at', sa.DateTime(timezone=True), nullable=True), sa.Column('is_active', sa.Boolean(), nullable=False), sa.Column('created_at', sa.DateTime(timezone=True), nullable=False), sa.ForeignKeyConstraint(['character_id'], ['characters.id'], ), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_voice_profiles_character_id'), 'voice_profiles', ['character_id'], unique=False) op.create_index(op.f('ix_voice_profiles_is_active'), 'voice_profiles', ['is_active'], unique=False) op.add_column('pending_confirmations', sa.Column('expires_at', sa.DateTime(timezone=True), nullable=True)) op.add_column('pending_confirmations', sa.Column('brief_json', sa.Text(), server_default='{}', nullable=False)) # ### end Alembic commands ### def downgrade() -> None: """Downgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### op.drop_column('pending_confirmations', 'brief_json') op.drop_column('pending_confirmations', 'expires_at') op.drop_index(op.f('ix_voice_profiles_is_active'), table_name='voice_profiles') op.drop_index(op.f('ix_voice_profiles_character_id'), table_name='voice_profiles') op.drop_table('voice_profiles') op.drop_index(op.f('ix_forms_status'), table_name='forms') op.drop_index(op.f('ix_forms_kind'), table_name='forms') op.drop_index(op.f('ix_forms_character_id'), table_name='forms') op.drop_table('forms') op.drop_index(op.f('ix_form_anchors_character_id'), table_name='form_anchors') op.drop_table('form_anchors') # ### end Alembic commands ###