diff --git a/surfsense_backend/alembic/versions/107_add_video_presentations_table.py b/surfsense_backend/alembic/versions/107_add_video_presentations_table.py index 76cd42a23..1dbfb63de 100644 --- a/surfsense_backend/alembic/versions/107_add_video_presentations_table.py +++ b/surfsense_backend/alembic/versions/107_add_video_presentations_table.py @@ -35,52 +35,60 @@ def upgrade() -> None: END $$; """) - op.create_table( - "video_presentations", - sa.Column("id", sa.Integer(), autoincrement=True, nullable=False), - sa.Column("title", sa.String(length=500), nullable=False), - sa.Column("slides", JSONB(), nullable=True), - sa.Column("scene_codes", JSONB(), nullable=True), - sa.Column( - "status", - video_presentation_status_enum, - server_default="ready", - nullable=False, - ), - sa.Column("search_space_id", sa.Integer(), nullable=False), - sa.Column("thread_id", sa.Integer(), nullable=True), - sa.Column( - "created_at", - sa.TIMESTAMP(timezone=True), - server_default=sa.text("now()"), - nullable=False, - ), - sa.ForeignKeyConstraint( - ["search_space_id"], - ["searchspaces.id"], - ondelete="CASCADE", - ), - sa.ForeignKeyConstraint( - ["thread_id"], - ["new_chat_threads.id"], - ondelete="SET NULL", - ), - sa.PrimaryKeyConstraint("id"), + conn = op.get_bind() + result = conn.execute( + sa.text("SELECT 1 FROM information_schema.tables WHERE table_name = 'video_presentations'") ) + if not result.fetchone(): + op.create_table( + "video_presentations", + sa.Column("id", sa.Integer(), autoincrement=True, nullable=False), + sa.Column("title", sa.String(length=500), nullable=False), + sa.Column("slides", JSONB(), nullable=True), + sa.Column("scene_codes", JSONB(), nullable=True), + sa.Column( + "status", + video_presentation_status_enum, + server_default="ready", + nullable=False, + ), + sa.Column("search_space_id", sa.Integer(), nullable=False), + sa.Column("thread_id", sa.Integer(), nullable=True), + sa.Column( + "created_at", + sa.TIMESTAMP(timezone=True), + server_default=sa.text("now()"), + nullable=False, + ), + sa.ForeignKeyConstraint( + ["search_space_id"], + ["searchspaces.id"], + ondelete="CASCADE", + ), + sa.ForeignKeyConstraint( + ["thread_id"], + ["new_chat_threads.id"], + ondelete="SET NULL", + ), + sa.PrimaryKeyConstraint("id"), + ) op.create_index( "ix_video_presentations_status", "video_presentations", ["status"], + if_not_exists=True, ) op.create_index( "ix_video_presentations_thread_id", "video_presentations", ["thread_id"], + if_not_exists=True, ) op.create_index( "ix_video_presentations_created_at", "video_presentations", ["created_at"], + if_not_exists=True, )