fix: make bulk observation rejection atomic

This commit is contained in:
ik
2026-09-21 20:27:45 +07:00
parent 1ac27986cb
commit 1dbda03209
2 changed files with 7 additions and 3 deletions
+4 -1
View File
@@ -61,12 +61,15 @@ def suggest_aliases(session: Session, observation: ExternalObservation) -> tuple
return (fish_alias.fish if fish_alias else None, waterbody_alias.waterbody if waterbody_alias else None)
def reject_observation(session: Session, observation: ExternalObservation, *, reason: str) -> ExternalObservation:
def reject_observation(
session: Session, observation: ExternalObservation, *, reason: str, commit: bool = True,
) -> ExternalObservation:
if observation.status == "published":
raise ExternalReviewError("published observation cannot be rejected")
observation.status = "rejected"
observation.review_note = reason
observation.reviewed_at = datetime.now(timezone.utc)
if commit:
session.commit()
return observation
+2 -1
View File
@@ -388,7 +388,8 @@ def admin_reject_external_observations_bulk(payload: ExternalObservationBulkDeci
raise HTTPException(status_code=409, detail="one or more observations changed; reload the queue")
for item in observations:
item.moderation_version += 1
reject_observation(db, item, reason=payload.reason)
reject_observation(db, item, reason=payload.reason, commit=False)
db.commit()
return ExternalObservationBulkResult(updated=len(observations))