58 lines
2.5 KiB
Python
58 lines
2.5 KiB
Python
"""Establish the tracked baseline schema and replace application-startup DDL.
|
|
|
|
Revision ID: 20260728_01
|
|
Revises:
|
|
Create Date: 2026-07-28
|
|
"""
|
|
|
|
from collections.abc import Sequence
|
|
|
|
from alembic import op
|
|
|
|
from app.database import Base
|
|
import app.models # noqa: F401 # Register every model with Base.metadata.
|
|
|
|
|
|
revision: str = "20260728_01"
|
|
down_revision: str | None = None
|
|
branch_labels: Sequence[str] | None = None
|
|
depends_on: Sequence[str] | None = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
"""Create the current schema and upgrade tables created by older app versions."""
|
|
bind = op.get_bind()
|
|
Base.metadata.create_all(bind=bind, checkfirst=True)
|
|
|
|
# These columns were historically added in application startup code. Keep this
|
|
# compatibility path so existing deployments can adopt Alembic safely.
|
|
statements = (
|
|
"ALTER TABLE customers ADD COLUMN IF NOT EXISTS remarks TEXT DEFAULT ''",
|
|
"ALTER TABLE visits ADD COLUMN IF NOT EXISTS visitor_name VARCHAR(50) DEFAULT ''",
|
|
"ALTER TABLE visits ADD COLUMN IF NOT EXISTS visitor_phone VARCHAR(20) DEFAULT ''",
|
|
"ALTER TABLE users ADD COLUMN IF NOT EXISTS require_report BOOLEAN DEFAULT TRUE",
|
|
"ALTER TABLE customers ADD COLUMN IF NOT EXISTS last_visit_date DATE",
|
|
"ALTER TABLE customers ADD COLUMN IF NOT EXISTS last_visit_manager_id UUID",
|
|
"ALTER TABLE visits ADD COLUMN IF NOT EXISTS companion_names TEXT[] DEFAULT '{}'",
|
|
"ALTER TABLE users ADD COLUMN IF NOT EXISTS color VARCHAR(7)",
|
|
"ALTER TABLE visits ADD COLUMN IF NOT EXISTS edit_log JSONB DEFAULT '[]'",
|
|
"ALTER TABLE daily_notes ADD COLUMN IF NOT EXISTS edit_log JSONB DEFAULT '[]'",
|
|
"ALTER TABLE work_plans ADD COLUMN IF NOT EXISTS edit_log JSONB DEFAULT '[]'",
|
|
"ALTER TABLE mini_business ADD COLUMN IF NOT EXISTS edit_log JSONB DEFAULT '[]'",
|
|
"ALTER TABLE key_visits ADD COLUMN IF NOT EXISTS edit_log JSONB DEFAULT '[]'",
|
|
"CREATE UNIQUE INDEX IF NOT EXISTS uq_users_wecom_userid "
|
|
"ON users (wecom_userid) WHERE wecom_userid IS NOT NULL",
|
|
)
|
|
for statement in statements:
|
|
op.execute(statement)
|
|
|
|
|
|
def downgrade() -> None:
|
|
"""Remove only objects introduced by the tracked security hardening revision.
|
|
|
|
The historical base tables pre-date Alembic and may contain production data, so
|
|
they are deliberately not dropped by a downgrade operation.
|
|
"""
|
|
op.execute("DROP INDEX IF EXISTS uq_users_wecom_userid")
|
|
op.execute("DROP TABLE IF EXISTS wecom_bind_tokens")
|