Hooray! Updates to updates!
This commit is contained in:
parent
85b0e576c7
commit
bcf14cf251
3 changed files with 106 additions and 33 deletions
|
|
@ -649,15 +649,16 @@ class CRUDService(Generic[T]):
|
|||
|
||||
return rows
|
||||
|
||||
def create(self, data: dict, actor=None) -> T:
|
||||
def create(self, data: dict, actor=None, *, commit: bool = True) -> T:
|
||||
session = self.session
|
||||
obj = self.model(**data)
|
||||
session.add(obj)
|
||||
session.commit()
|
||||
self._log_version("create", obj, actor)
|
||||
if commit:
|
||||
session.commit()
|
||||
self._log_version("create", obj, actor, commit=commit)
|
||||
return obj
|
||||
|
||||
def update(self, id: int, data: dict, actor=None) -> T:
|
||||
def update(self, id: int, data: dict, actor=None, *, commit: bool = True) -> T:
|
||||
session = self.session
|
||||
obj = session.get(self.model, id)
|
||||
if not obj:
|
||||
|
|
@ -695,7 +696,8 @@ class CRUDService(Generic[T]):
|
|||
return obj
|
||||
|
||||
# Commit atomically
|
||||
session.commit()
|
||||
if commit:
|
||||
session.commit()
|
||||
|
||||
# AFTER snapshot for audit
|
||||
after = obj.as_dict()
|
||||
|
|
@ -712,10 +714,10 @@ class CRUDService(Generic[T]):
|
|||
return obj
|
||||
|
||||
# Log both what we *intended* and what *actually* happened
|
||||
self._log_version("update", obj, actor, metadata={"diff": actual, "patch": patch})
|
||||
self._log_version("update", obj, actor, metadata={"diff": actual, "patch": patch}, commit=commit)
|
||||
return obj
|
||||
|
||||
def delete(self, id: int, hard: bool = False, actor = None):
|
||||
def delete(self, id: int, hard: bool = False, actor = None, *, commit: bool = True):
|
||||
session = self.session
|
||||
obj = session.get(self.model, id)
|
||||
if not obj:
|
||||
|
|
@ -725,11 +727,12 @@ class CRUDService(Generic[T]):
|
|||
else:
|
||||
soft = cast(_SoftDeletable, obj)
|
||||
soft.is_deleted = True
|
||||
session.commit()
|
||||
self._log_version("delete", obj, actor)
|
||||
if commit:
|
||||
session.commit()
|
||||
self._log_version("delete", obj, actor, commit=commit)
|
||||
return obj
|
||||
|
||||
def _log_version(self, change_type: str, obj: T, actor=None, metadata: dict | None = None):
|
||||
def _log_version(self, change_type: str, obj: T, actor=None, metadata: dict | None = None, *, commit: bool = True):
|
||||
session = self.session
|
||||
try:
|
||||
snapshot = {}
|
||||
|
|
@ -747,7 +750,8 @@ class CRUDService(Generic[T]):
|
|||
meta=to_jsonable(metadata) if metadata else None,
|
||||
)
|
||||
session.add(version)
|
||||
session.commit()
|
||||
if commit:
|
||||
session.commit()
|
||||
except Exception as e:
|
||||
log.warning(f"Version logging failed for {self.model.__name__} id={getattr(obj, "id", "?")}: {str(e)}")
|
||||
log.warning(f"Version logging failed for {self.model.__name__} id={getattr(obj, 'id', '?')}: {str(e)}")
|
||||
session.rollback()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue