fix: make bulk observation rejection atomic
This commit is contained in:
@@ -61,13 +61,16 @@ 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)
|
||||
session.commit()
|
||||
if commit:
|
||||
session.commit()
|
||||
return observation
|
||||
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user