Source code for app.models.base
"""SQLAlchemy declarative base and shared mixins."""
import uuid
from datetime import datetime, timezone
from sqlalchemy import DateTime, func
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
[docs]
class Base(DeclarativeBase):
pass
[docs]
class TimestampMixin:
"""Adds created_at and updated_at to any model."""
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(),
nullable=False,
)
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(),
onupdate=func.now(),
nullable=False,
)
[docs]
class UUIDPrimaryKeyMixin:
"""UUID primary key using PostgreSQL gen_random_uuid()."""
id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True),
primary_key=True,
default=uuid.uuid4,
)