67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
|
|
"""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",
|
||
|
|
)
|