73 lines
3.7 KiB
Python
73 lines
3.7 KiB
Python
"""Phase 7T.1 domain mapping table
|
|
|
|
Revision ID: 20260613_phase_7t1_domain_mapping
|
|
Revises: 20260612_phase_7s3_email_mapping
|
|
Create Date: 2026-06-13
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
revision = "20260613_phase_7t1_domain_mapping"
|
|
down_revision = "20260612_phase_7s3_email_mapping"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def _table_exists(table_name: str) -> bool:
|
|
bind = op.get_bind()
|
|
inspector = sa.inspect(bind)
|
|
return table_name in inspector.get_table_names()
|
|
|
|
|
|
def upgrade() -> None:
|
|
if _table_exists("domain_mappings"):
|
|
return
|
|
|
|
op.create_table(
|
|
"domain_mappings",
|
|
sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True),
|
|
sa.Column("domain_name", sa.String(length=255), nullable=False),
|
|
sa.Column("domain_type", sa.String(length=60), nullable=False),
|
|
sa.Column("tenant_id", sa.Integer(), nullable=True),
|
|
sa.Column("branch_id", sa.Integer(), nullable=True),
|
|
sa.Column("consultant_id", sa.Integer(), nullable=True),
|
|
sa.Column("parent_tenant_id", sa.Integer(), nullable=True),
|
|
sa.Column("is_primary", sa.Boolean(), nullable=False, server_default=sa.text("0")),
|
|
sa.Column("is_verified", sa.Boolean(), nullable=False, server_default=sa.text("0")),
|
|
sa.Column("status", sa.String(length=30), nullable=False, server_default="draft"),
|
|
sa.Column("verification_token", sa.String(length=120), nullable=True),
|
|
sa.Column("dns_txt_name", sa.String(length=255), nullable=True),
|
|
sa.Column("dns_txt_value", sa.String(length=255), nullable=True),
|
|
sa.Column("ssl_mode", sa.String(length=30), nullable=False, server_default="manual"),
|
|
sa.Column("notes", sa.Text(), nullable=True),
|
|
sa.Column("created_by_user_id", sa.Integer(), nullable=True),
|
|
sa.Column("updated_by_user_id", sa.Integer(), nullable=True),
|
|
sa.Column("created_at_utc", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
|
|
sa.Column("updated_at_utc", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
|
|
sa.ForeignKeyConstraint(["tenant_id"], ["tenants.id"], ondelete="SET NULL"),
|
|
sa.ForeignKeyConstraint(["branch_id"], ["branches.id"], ondelete="SET NULL"),
|
|
sa.ForeignKeyConstraint(["consultant_id"], ["consultant_profiles.id"], ondelete="SET NULL"),
|
|
sa.ForeignKeyConstraint(["parent_tenant_id"], ["tenants.id"], ondelete="SET NULL"),
|
|
sa.ForeignKeyConstraint(["created_by_user_id"], ["users.id"], ondelete="SET NULL"),
|
|
sa.ForeignKeyConstraint(["updated_by_user_id"], ["users.id"], ondelete="SET NULL"),
|
|
sa.UniqueConstraint("domain_name", name="uq_domain_mappings_domain_name"),
|
|
)
|
|
op.create_index("ix_domain_mappings_domain_name", "domain_mappings", ["domain_name"])
|
|
op.create_index("ix_domain_mappings_domain_type", "domain_mappings", ["domain_type"])
|
|
op.create_index("ix_domain_mappings_status", "domain_mappings", ["status"])
|
|
op.create_index("ix_domain_mappings_tenant_id", "domain_mappings", ["tenant_id"])
|
|
op.create_index("ix_domain_mappings_branch_id", "domain_mappings", ["branch_id"])
|
|
op.create_index("ix_domain_mappings_consultant_id", "domain_mappings", ["consultant_id"])
|
|
op.create_index("ix_domain_mappings_parent_tenant_id", "domain_mappings", ["parent_tenant_id"])
|
|
op.create_index("ix_domain_mappings_is_primary", "domain_mappings", ["is_primary"])
|
|
op.create_index("ix_domain_mappings_is_verified", "domain_mappings", ["is_verified"])
|
|
op.create_index("ix_domain_mappings_verification_token", "domain_mappings", ["verification_token"])
|
|
|
|
|
|
def downgrade() -> None:
|
|
if not _table_exists("domain_mappings"):
|
|
return
|
|
op.drop_table("domain_mappings")
|