"""local playlists: playlists + playlist_items Revision ID: 0011_playlists Revises: 0010_watch_progress Create Date: 2026-06-15 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa revision: str = "0011_playlists" down_revision: Union[str, None] = "0010_watch_progress" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.create_table( "playlists", sa.Column("id", sa.Integer(), primary_key=True), sa.Column( "user_id", sa.Integer(), sa.ForeignKey("users.id", ondelete="CASCADE"), nullable=False, ), sa.Column("name", sa.String(length=255), nullable=False), sa.Column( "kind", sa.String(length=16), nullable=False, server_default="user" ), sa.Column( "source", sa.String(length=16), nullable=False, server_default="local" ), sa.Column("yt_playlist_id", sa.String(length=64), nullable=True), sa.Column( "dirty", sa.Boolean(), nullable=False, server_default="false" ), sa.Column("position", sa.Integer(), nullable=False, server_default="0"), sa.Column( "created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), sa.Column( "updated_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), ) op.create_index("ix_playlists_user_id", "playlists", ["user_id"]) op.create_table( "playlist_items", sa.Column("id", sa.Integer(), primary_key=True), sa.Column( "playlist_id", sa.Integer(), sa.ForeignKey("playlists.id", ondelete="CASCADE"), nullable=False, ), sa.Column( "video_id", sa.String(length=16), sa.ForeignKey("videos.id", ondelete="CASCADE"), nullable=False, ), sa.Column("position", sa.Integer(), nullable=False, server_default="0"), sa.Column( "added_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), sa.UniqueConstraint("playlist_id", "video_id", name="uq_playlist_video"), ) op.create_index("ix_playlist_items_playlist_id", "playlist_items", ["playlist_id"]) op.create_index("ix_playlist_items_video_id", "playlist_items", ["video_id"]) def downgrade() -> None: op.drop_index("ix_playlist_items_video_id", table_name="playlist_items") op.drop_index("ix_playlist_items_playlist_id", table_name="playlist_items") op.drop_table("playlist_items") op.drop_index("ix_playlists_user_id", table_name="playlists") op.drop_table("playlists")