"""Reading attached to a study plan block, and who has finished it. Revision ID: f4a5b6c7d8e9 Revises: e3f4a5b6c7d8 """ import sqlalchemy as sa from alembic import op revision = "f4a5b6c7d8e9" down_revision = "e3f4a5b6c7d8" branch_labels = None depends_on = None def upgrade(): op.create_table( "study_plan_block_articles", sa.Column("id", sa.Integer, primary_key=True), sa.Column("block_id", sa.Integer, sa.ForeignKey("study_plan_blocks.id", ondelete="CASCADE"), nullable=False, index=True), sa.Column("article_id", sa.Integer, sa.ForeignKey("articles.id", ondelete="CASCADE"), nullable=False, index=True), sa.Column("position", sa.Integer, server_default="0"), sa.UniqueConstraint("block_id", "article_id", name="uq_block_article"), ) # Opening an article is not the same claim as having finished with it, so # this is its own table rather than a flag on article_views. op.create_table( "study_plan_article_reads", sa.Column("id", sa.Integer, primary_key=True), sa.Column("block_article_id", sa.Integer, sa.ForeignKey("study_plan_block_articles.id", ondelete="CASCADE"), nullable=False, index=True), sa.Column("user_id", sa.Integer, sa.ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True), sa.Column("read_at", sa.DateTime, server_default=sa.func.now()), sa.UniqueConstraint("block_article_id", "user_id", name="uq_block_article_read"), ) def downgrade(): op.drop_table("study_plan_article_reads") op.drop_table("study_plan_block_articles")