From f69ea6ee61433ccff296e693c9423613b5fdf2b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Boschi?= Date: Thu, 4 Dec 2025 21:44:33 +0100 Subject: [PATCH] fix migration --- .../versions/5a366d414dce_initial_schema.py | 2 +- .../rename_personality_to_disposition.py | 27 ++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/hindsight-api/alembic/versions/5a366d414dce_initial_schema.py b/hindsight-api/alembic/versions/5a366d414dce_initial_schema.py index 51578fc5..7971e802 100644 --- a/hindsight-api/alembic/versions/5a366d414dce_initial_schema.py +++ b/hindsight-api/alembic/versions/5a366d414dce_initial_schema.py @@ -31,7 +31,7 @@ def upgrade() -> None: 'banks', sa.Column('bank_id', sa.Text(), nullable=False), sa.Column('name', sa.Text(), nullable=True), - sa.Column('disposition', postgresql.JSONB(astext_type=sa.Text()), server_default=sa.text("'{}'::jsonb"), nullable=False), + sa.Column('personality', postgresql.JSONB(astext_type=sa.Text()), server_default=sa.text("'{}'::jsonb"), nullable=False), sa.Column('background', sa.Text(), nullable=True), sa.Column('created_at', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), sa.Column('updated_at', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), diff --git a/hindsight-api/alembic/versions/rename_personality_to_disposition.py b/hindsight-api/alembic/versions/rename_personality_to_disposition.py index 9cd0ac11..5345b906 100644 --- a/hindsight-api/alembic/versions/rename_personality_to_disposition.py +++ b/hindsight-api/alembic/versions/rename_personality_to_disposition.py @@ -9,6 +9,7 @@ from typing import Sequence, Union from alembic import op import sqlalchemy as sa +from sqlalchemy.dialects import postgresql # revision identifiers, used by Alembic. @@ -20,16 +21,36 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: """Rename personality column to disposition in banks table (if it exists).""" - # Check if 'personality' column exists before renaming - # This handles both old databases (with personality) and new databases (with disposition) conn = op.get_bind() + + # Check if 'personality' column exists (old database) result = conn.execute(sa.text(""" SELECT column_name FROM information_schema.columns WHERE table_name = 'banks' AND column_name = 'personality' """)) - if result.fetchone(): + has_personality = result.fetchone() is not None + + # Check if 'disposition' column exists (new database) + result = conn.execute(sa.text(""" + SELECT column_name + FROM information_schema.columns + WHERE table_name = 'banks' AND column_name = 'disposition' + """)) + has_disposition = result.fetchone() is not None + + if has_personality and not has_disposition: + # Old database: rename personality -> disposition op.alter_column('banks', 'personality', new_column_name='disposition') + elif not has_personality and not has_disposition: + # Neither exists (shouldn't happen, but be safe): add disposition column + op.add_column('banks', sa.Column( + 'disposition', + postgresql.JSONB(astext_type=sa.Text()), + server_default=sa.text("'{}'::jsonb"), + nullable=False + )) + # else: disposition already exists, nothing to do def downgrade() -> None: