97 lines
3.5 KiB
Python
97 lines
3.5 KiB
Python
"""initial database model
|
|
|
|
Revision ID: 8fe51426321d
|
|
Revises:
|
|
Create Date: 2026-04-06 12:36:46.877760
|
|
|
|
"""
|
|
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = "8fe51426321d"
|
|
down_revision: Union[str, Sequence[str], None] = None
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
"""Upgrade schema."""
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.create_table(
|
|
"contact",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("email", sa.String(), nullable=True),
|
|
sa.Column("first_name", sa.String(), nullable=True),
|
|
sa.Column("last_name", sa.String(), nullable=True),
|
|
sa.Column("phonenumber", sa.String(), nullable=True),
|
|
sa.Column("vat_number", sa.String(), nullable=True),
|
|
sa.Column("street_address", sa.String(), nullable=True),
|
|
sa.Column("street_address_line_2", sa.String(), nullable=True),
|
|
sa.Column("post_office_box_number", sa.String(), nullable=True),
|
|
sa.Column("locality", sa.String(), nullable=True),
|
|
sa.Column("country_code", sa.String(), nullable=True),
|
|
sa.Column("address_region", sa.String(), nullable=True),
|
|
sa.Column("postal_code", sa.String(), nullable=True),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"user",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("email", sa.String(), nullable=True),
|
|
sa.Column("first_name", sa.String(), nullable=True),
|
|
sa.Column("last_name", sa.String(), nullable=True),
|
|
sa.Column("oidc_id", sa.String(), nullable=True),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_index(op.f("ix_user_oidc_id"), "user", ["oidc_id"], unique=True)
|
|
op.create_table(
|
|
"organisation",
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
|
sa.Column("name", sa.String(), nullable=True),
|
|
sa.Column("status", sa.String(), nullable=True),
|
|
sa.Column("intake_questionnaire", sa.JSON(), nullable=True),
|
|
sa.Column("billing_contact_id", sa.Integer(), nullable=True),
|
|
sa.Column("security_contact_id", sa.Integer(), nullable=True),
|
|
sa.Column("owner_contact_id", sa.Integer(), nullable=True),
|
|
sa.ForeignKeyConstraint(
|
|
["billing_contact_id"],
|
|
["contact.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["owner_contact_id"],
|
|
["contact.id"],
|
|
),
|
|
sa.ForeignKeyConstraint(
|
|
["security_contact_id"],
|
|
["contact.id"],
|
|
),
|
|
sa.PrimaryKeyConstraint("id"),
|
|
)
|
|
op.create_table(
|
|
"orgusers",
|
|
sa.Column("org_id", sa.Integer(), nullable=False),
|
|
sa.Column("user_id", sa.Integer(), nullable=False),
|
|
sa.Column(
|
|
"is_admin", sa.Boolean(), server_default=sa.text("false"), nullable=False
|
|
),
|
|
sa.ForeignKeyConstraint(["org_id"], ["organisation.id"], ondelete="CASCADE"),
|
|
sa.ForeignKeyConstraint(["user_id"], ["user.id"], ondelete="CASCADE"),
|
|
sa.PrimaryKeyConstraint("org_id", "user_id"),
|
|
)
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade() -> None:
|
|
"""Downgrade schema."""
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.drop_table("orgusers")
|
|
op.drop_table("organisation")
|
|
op.drop_index(op.f("ix_user_oidc_id"), table_name="user")
|
|
op.drop_table("user")
|
|
op.drop_table("contact")
|
|
# ### end Alembic commands ###
|