Files
social-app/backend/alembic/versions/20260313_0001_inbox_message_content_jsonb.py
T

67 lines
1.7 KiB
Python
Raw Normal View History

"""Convert inbox_messages.content from text to jsonb and migrate existing data.
Revision ID: 20260313_0001
Revises: 202603060002
Create Date: 2026-03-13 12:00:00
"""
from __future__ import annotations
from typing import Sequence
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import JSONB
revision: str = "20260313_0001"
down_revision: str = "202603060002"
branch_labels: Sequence[str] | None = None
depends_on: Sequence[str] | None = None
def upgrade() -> None:
op.execute("""
UPDATE inbox_messages
SET content = (
CASE
WHEN message_type = 'friend_request' AND content IS NOT NULL THEN
jsonb_build_object('type', 'request', 'message', content)
WHEN message_type = 'calendar' AND content IS NOT NULL THEN
content::jsonb
ELSE NULL
END
)
WHERE content IS NOT NULL
""")
op.alter_column(
"inbox_messages",
"content",
existing_type=sa.Text(),
type_=JSONB(),
postgresql_using="content::jsonb",
)
def downgrade() -> None:
op.execute("""
UPDATE inbox_messages
SET content = (
CASE
WHEN message_type = 'friend_request' AND content IS NOT NULL THEN
content->>'message'
WHEN message_type = 'calendar' AND content IS NOT NULL THEN
content::text
ELSE NULL
END
)
WHERE content IS NOT NULL
""")
op.alter_column(
"inbox_messages",
"content",
existing_type=JSONB(),
type_=sa.Text(),
postgresql_using="content::text",
)