youtube-summarizer/backend/alembic/versions/add_history_management_fiel...

61 lines
2.1 KiB
Python

"""Add history management fields to summaries
Revision ID: add_history_fields_001
Revises:
Create Date: 2025-08-26 21:50:00.000000
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import sqlite
# revision identifiers, used by Alembic.
revision = 'add_history_fields_001'
down_revision = None
branch_labels = None
depends_on = None
def upgrade() -> None:
# Add new columns to summaries table
with op.batch_alter_table('summaries', schema=None) as batch_op:
batch_op.add_column(sa.Column('is_starred', sa.Boolean(), nullable=True))
batch_op.add_column(sa.Column('notes', sa.Text(), nullable=True))
batch_op.add_column(sa.Column('tags', sa.JSON(), nullable=True))
batch_op.add_column(sa.Column('shared_token', sa.String(64), nullable=True))
batch_op.add_column(sa.Column('is_public', sa.Boolean(), nullable=True))
batch_op.add_column(sa.Column('view_count', sa.Integer(), nullable=True))
# Add indexes
batch_op.create_index('idx_is_starred', ['is_starred'])
batch_op.create_index('idx_shared_token', ['shared_token'], unique=True)
# Create composite indexes
op.create_index('idx_user_starred', 'summaries', ['user_id', 'is_starred'])
op.create_index('idx_user_created', 'summaries', ['user_id', 'created_at'])
# Set default values for existing rows
op.execute("""
UPDATE summaries
SET is_starred = 0,
is_public = 0,
view_count = 0
WHERE is_starred IS NULL
""")
def downgrade() -> None:
# Remove composite indexes first
op.drop_index('idx_user_created', table_name='summaries')
op.drop_index('idx_user_starred', table_name='summaries')
# Remove columns and indexes
with op.batch_alter_table('summaries', schema=None) as batch_op:
batch_op.drop_index('idx_shared_token')
batch_op.drop_index('idx_is_starred')
batch_op.drop_column('view_count')
batch_op.drop_column('is_public')
batch_op.drop_column('shared_token')
batch_op.drop_column('tags')
batch_op.drop_column('notes')
batch_op.drop_column('is_starred')