import uuid from datetime import datetime, UTC from sqlalchemy import String, Text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column def uuid7() -> str: return str(uuid.uuid4()) class Base(DeclarativeBase): pass class UUIDMixin: id: Mapped[str] = mapped_column(String(36), primary_key=True, default=uuid7) class TenantMixin: tenant_id: Mapped[str] = mapped_column(String(36), nullable=False, index=True) class TimestampMixin: created_at: Mapped[str] = mapped_column( Text, default=lambda: datetime.now(UTC).isoformat() ) updated_at: Mapped[str] = mapped_column( Text, default=lambda: datetime.now(UTC).isoformat(), onupdate=lambda: datetime.now(UTC).isoformat(), )