"""init_orgs_and_users Revision ID: 0001 Revises: Create Date: 2026-06-03 """ from __future__ import annotations from collections.abc import Sequence from typing import Union import sqlalchemy as sa from alembic import op # revision identifiers, used by Alembic. revision: str = "0001" down_revision: Union[str, None] = None branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # === orgs === op.create_table( "orgs", sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True), sa.Column("name", sa.String(length=255), nullable=False), sa.Column("logo_url", sa.String(length=1024), nullable=True), sa.Column( "default_currency", sa.String(length=3), nullable=False, server_default="EUR", ), sa.Column( "created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), sa.Column( "updated_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), ) op.create_index("ix_orgs_created_at", "orgs", ["created_at"]) # === users === op.create_table( "users", sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True), sa.Column("org_id", sa.Integer(), nullable=False), sa.Column("email", sa.String(length=255), nullable=False), sa.Column("password_hash", sa.String(length=255), nullable=False), sa.Column("name", sa.String(length=255), nullable=False), sa.Column( "role", sa.String(length=32), nullable=False, server_default="sales_rep", ), sa.Column("avatar_url", sa.String(length=1024), nullable=True), sa.Column( "email_notifications", sa.Boolean(), nullable=False, server_default=sa.text("1"), ), sa.Column( "created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), sa.Column( "updated_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False, ), sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True), sa.ForeignKeyConstraint( ["org_id"], ["orgs.id"], ondelete="CASCADE", name="fk_users_org_id" ), sa.UniqueConstraint("org_id", "email", name="uq_users_org_email"), ) op.create_index("ix_users_email", "users", ["email"]) op.create_index("ix_users_org_id", "users", ["org_id"]) op.create_index("ix_users_created_at", "users", ["created_at"]) op.create_index("ix_users_deleted_at", "users", ["deleted_at"]) def downgrade() -> None: op.drop_index("ix_users_deleted_at", table_name="users") op.drop_index("ix_users_created_at", table_name="users") op.drop_index("ix_users_org_id", table_name="users") op.drop_index("ix_users_email", table_name="users") op.drop_table("users") op.drop_index("ix_orgs_created_at", table_name="orgs") op.drop_table("orgs")