"""create api_keys table Revision ID: 20260118_0008 Revises: add_user_predictions_tracking Create Date: 2026-01-18 00:00:00.000000 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = '20260118_0008' down_revision = 'add_user_predictions_tracking' branch_labels = None depends_on = None def upgrade() -> None: """Create api_keys table.""" op.create_table( 'api_keys', sa.Column('id', sa.Integer(), nullable=False), sa.Column('user_id', sa.Integer(), nullable=False), sa.Column('key_hash', sa.String(255), nullable=False), sa.Column('key_prefix', sa.String(8), nullable=False), sa.Column('is_active', sa.Boolean(), nullable=False, server_default='1'), sa.Column('rate_limit', sa.Integer(), nullable=False, server_default='100'), sa.Column('last_used_at', sa.DateTime(), nullable=True), sa.Column('created_at', sa.DateTime(), nullable=False, server_default=sa.func.now()), sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('key_hash') ) # Create indexes op.create_index(op.f('ix_api_keys_id'), 'api_keys', ['id'], unique=False) op.create_index(op.f('ix_api_keys_user_id'), 'api_keys', ['user_id'], unique=False) op.create_index(op.f('ix_api_keys_key_hash'), 'api_keys', ['key_hash'], unique=True) op.create_index(op.f('ix_api_keys_key_prefix'), 'api_keys', ['key_prefix'], unique=False) def downgrade() -> None: """Drop api_keys table.""" op.drop_index(op.f('ix_api_keys_key_prefix'), table_name='api_keys') op.drop_index(op.f('ix_api_keys_key_hash'), table_name='api_keys') op.drop_index(op.f('ix_api_keys_user_id'), table_name='api_keys') op.drop_index(op.f('ix_api_keys_id'), table_name='api_keys') op.drop_table('api_keys')