Split batch_alter_table operations to avoid circular dependency errors caused by the current_turn_team_id foreign key during SQLite table recreation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
"""Add question ownership and sharing
|
|
|
|
Revision ID: 9a119272b516
|
|
Revises: d2113a61fa42
|
|
Create Date: 2026-04-03 09:32:53.890510
|
|
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects import sqlite
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = '9a119272b516'
|
|
down_revision = 'd2113a61fa42'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade():
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.create_table('question_shares',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('question_id', sa.Integer(), nullable=False),
|
|
sa.Column('shared_with_user_id', sa.Integer(), nullable=False),
|
|
sa.Column('shared_by_user_id', sa.Integer(), nullable=False),
|
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(['question_id'], ['questions.id'], ),
|
|
sa.ForeignKeyConstraint(['shared_by_user_id'], ['users.id'], ),
|
|
sa.ForeignKeyConstraint(['shared_with_user_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
sa.UniqueConstraint('question_id', 'shared_with_user_id', name='unique_question_share')
|
|
)
|
|
# Split into separate batch operations to avoid SQLite circular dependency
|
|
# with the existing current_turn_team_id foreign key
|
|
with op.batch_alter_table('games', schema=None) as batch_op:
|
|
batch_op.add_column(sa.Column('completed_at', sa.DateTime(), nullable=True))
|
|
batch_op.add_column(sa.Column('winners', sa.JSON(), nullable=True))
|
|
|
|
with op.batch_alter_table('games', schema=None) as batch_op:
|
|
batch_op.drop_column('turn_order')
|
|
batch_op.drop_column('is_steal_mode')
|
|
|
|
with op.batch_alter_table('questions', schema=None) as batch_op:
|
|
batch_op.add_column(sa.Column('created_by', sa.Integer(), nullable=True))
|
|
batch_op.create_foreign_key('fk_questions_created_by', 'users', ['created_by'], ['id'])
|
|
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade():
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
with op.batch_alter_table('questions', schema=None) as batch_op:
|
|
batch_op.drop_constraint('fk_questions_created_by', type_='foreignkey')
|
|
batch_op.drop_column('created_by')
|
|
|
|
with op.batch_alter_table('games', schema=None) as batch_op:
|
|
batch_op.add_column(sa.Column('is_steal_mode', sa.BOOLEAN(), nullable=True))
|
|
batch_op.add_column(sa.Column('turn_order', sqlite.JSON(), nullable=True))
|
|
batch_op.drop_column('winners')
|
|
batch_op.drop_column('completed_at')
|
|
|
|
op.drop_table('question_shares')
|
|
# ### end Alembic commands ###
|