diff --git a/app/models/base.py b/app/models/base.py index c40ecaa..80cc117 100644 --- a/app/models/base.py +++ b/app/models/base.py @@ -1,5 +1,6 @@ from datetime import UTC, datetime +from sqlalchemy import event from sqlmodel import Field, SQLModel @@ -11,3 +12,10 @@ class BaseModel(SQLModel): # 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, connection, target): + """Automatically set updated_at timestamp before update operations.""" + target.updated_at = datetime.now(UTC) diff --git a/app/repositories/base.py b/app/repositories/base.py index 2d62b4c..5197f86 100644 --- a/app/repositories/base.py +++ b/app/repositories/base.py @@ -114,6 +114,7 @@ class BaseRepository[ModelType]: for field, value in update_data.items(): setattr(entity, field, value) + # The updated_at timestamp will be automatically set by the SQLAlchemy event listener self.session.add(entity) await self.session.commit() await self.session.refresh(entity)