from datetime import UTC, datetime from typing import Any from sqlalchemy import event from sqlalchemy.engine import Connection from sqlalchemy.orm import Mapper from sqlmodel import Field, SQLModel class BaseModel(SQLModel): """Base model with common fields for all models.""" id: int | None = Field(primary_key=True, default=None) # timestamps created_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) # SQLAlchemy event listener to automatically update updated_at timestamp @event.listens_for(BaseModel, "before_update", propagate=True) def update_timestamp( mapper: Mapper[Any], # noqa: ARG001 connection: Connection, # noqa: ARG001 target: BaseModel, ) -> None: """Automatically set updated_at timestamp before update operations.""" target.updated_at = datetime.now(UTC)