"""Feedback on a question, replacing the comment thread A comment thread under every question is a discussion that needs moderating. What people used it for was telling an educator something was wrong, which is a private report someone is meant to act on. This is that. Revision ID: c3d4e5f6a7b8 Revises: b2c3d4e5f6a7 """ import sqlalchemy as sa from alembic import op revision = "c3d4e5f6a7b8" down_revision = "b2c3d4e5f6a7" branch_labels = None depends_on = None def upgrade() -> None: # Guarded: create_all() may have built it already on a fresh deploy. if "question_feedback" in sa.inspect(op.get_bind()).get_table_names(): return op.create_table( "question_feedback", sa.Column("id", sa.Integer(), primary_key=True, index=True), sa.Column("question_id", sa.Integer(), sa.ForeignKey("questions.id", ondelete="CASCADE"), nullable=False), sa.Column("user_id", sa.Integer(), sa.ForeignKey("users.id", ondelete="SET NULL"), nullable=True), sa.Column("message", sa.Text(), nullable=False), sa.Column("status", sa.String(length=20), nullable=False, server_default="open"), sa.Column("reply", sa.Text(), nullable=True), sa.Column("replied_by", sa.Integer(), sa.ForeignKey("users.id", ondelete="SET NULL"), nullable=True), sa.Column("replied_at", sa.DateTime(), nullable=True), sa.Column("created_at", sa.DateTime(), server_default=sa.func.now()), ) op.create_index("ix_question_feedback_question_id", "question_feedback", ["question_id"]) op.create_index("ix_question_feedback_status", "question_feedback", ["status"]) def downgrade() -> None: if "question_feedback" in sa.inspect(op.get_bind()).get_table_names(): op.drop_table("question_feedback")