From b691649f7e91fd485b14eef0dc82d7b2cbc3080f Mon Sep 17 00:00:00 2001 From: JSC Date: Sat, 16 Aug 2025 00:07:15 +0200 Subject: [PATCH] feat: Implement automatic updated_at timestamp management in BaseModel and update BaseRepository to reflect changes --- app/models/base.py | 8 ++++++++ app/repositories/base.py | 1 + 2 files changed, 9 insertions(+) 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)