A12: Add meaningful changes/provenance to ImportRecordEvent, skip events for unchanged data
This commit is contained in:
@@ -189,13 +189,31 @@ def _import_records_locked(session: Session, *, url: str, region: str, category:
|
||||
if report is None:
|
||||
report = CatchReport(fish=fish, waterbody=waterbody, bait=bait, spot=None, weight_g=raw.weight_g, caught_at=caught, reported_at=now, player_name=raw.player, source_type=SourceType.official_record, source_url=url, source_external_id=key, source_confidence=100, moderation_status=ModerationStatus.approved, raw_payload=payload)
|
||||
session.add(report)
|
||||
session.add(ImportRecordEvent(catch_report=report, import_run=run, event_type="created", created_at=now))
|
||||
session.add(ImportRecordEvent(
|
||||
catch_report=report, import_run=run, event_type="created", created_at=now,
|
||||
changes={"weight_g": raw.weight_g, "player": raw.player, "record_date": raw.record_date.isoformat()},
|
||||
provenance={"source_system": "rf4-official", "source_url": url, "source_external_id": key},
|
||||
))
|
||||
run.rows_created += 1
|
||||
else:
|
||||
report.raw_payload = payload
|
||||
report.source_url = url
|
||||
session.add(ImportRecordEvent(catch_report=report, import_run=run, event_type="updated", created_at=now))
|
||||
run.rows_updated += 1
|
||||
# A12: Only create event if actual values changed
|
||||
old_payload = (report.raw_payload or {})
|
||||
new_payload = asdict(raw) | {"record_date": raw.record_date.isoformat()}
|
||||
changed_fields = {}
|
||||
for field in ("weight_g", "player", "waterbody", "bait", "record_date"):
|
||||
old_val = old_payload.get(field)
|
||||
new_val = new_payload.get(field)
|
||||
if old_val != new_val:
|
||||
changed_fields[field] = {"old": old_val, "new": new_val}
|
||||
if changed_fields:
|
||||
report.raw_payload = payload
|
||||
report.source_url = url
|
||||
session.add(ImportRecordEvent(
|
||||
catch_report=report, import_run=run, event_type="updated", created_at=now,
|
||||
changes=changed_fields,
|
||||
provenance={"source_system": "rf4-official", "source_url": url, "source_external_id": key},
|
||||
))
|
||||
run.rows_updated += 1
|
||||
run.status = ImportStatus.success
|
||||
run.finished_at = datetime.now(timezone.utc)
|
||||
session.commit()
|
||||
|
||||
Reference in New Issue
Block a user