"""A watched Takeout video's length, and the channels a user put out of their list Revision ID: 0115_takeout_channels Revises: 0114_video_unmarks Create Date: 2026-10-24 The "channels you watch but do not follow" list counts a user's watched videos over five minutes by channel. The length is asked of YouTube for that list and kept on the Takeout row; a channel the user does not want on the list is kept apart. """ import sqlalchemy as sa from alembic import op revision: str = "0115_takeout_channels" down_revision: str | None = "0114_video_unmarks" branch_labels: str | None = None depends_on: str | None = None def upgrade() -> None: op.add_column( "takeout_items", sa.Column("looked_up_at", sa.DateTime(timezone=True), nullable=True) ) op.add_column("takeout_items", sa.Column("duration_seconds", sa.Integer(), nullable=True)) op.create_table( "takeout_channel_dismissals", sa.Column("id", sa.Integer(), primary_key=True), sa.Column( "user_id", sa.Integer(), sa.ForeignKey("users.id", ondelete="CASCADE"), nullable=False, ), sa.Column("channel_id", sa.String(32), nullable=False), sa.Column( "created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), sa.UniqueConstraint("user_id", "channel_id", name="uq_takeout_channel_dismissal"), ) def downgrade() -> None: op.drop_table("takeout_channel_dismissals") op.drop_column("takeout_items", "duration_seconds") op.drop_column("takeout_items", "looked_up_at")