Synchronisation (Deep Dive)
Die Synchronisation ist das Herzstück von MistelMonitor, da sie die “Offline-First” Architektur mit der zentralen Datenerfassung verbindet.
Push-First Strategie
Der Sync-Prozess folgt strikt dem “Push-First” Prinzip. Das bedeutet: Bevor wir neue Daten vom Server holen, stellen wir sicher, dass alle lokalen Änderungen gesichert sind.
Push Images & Audio:
- Bilder und Audio-Dateien werden via
MultipartRequesteinzeln hochgeladen. - Dies geschieht vor den Metadaten, damit der Server die Dateien bereits hat, wenn der Bericht dazu kommt.
- Bilder und Audio-Dateien werden via
Push Data (JSON):
- Alle geänderten Datensätze (Reports, Events, etc.) werden in einem großen JSON-Paket gesendet.
- Der Server verarbeitet dies transaktional: Entweder alles wird gespeichert oder nichts.
Pull Data:
- Erst wenn der Upload erfolgreich war, fragen wir den Server: “Was gibt es Neues?”.
- Wir laden neue Sektoren, Events oder Berichte anderer Teams herunter.
DataTransferService
Die Klasse lib/services/data_transfer_service.dart steuert diesen Ablauf.
Konfliktlösung
- Last-Write-Wins: Da wir keine komplexen Merges auf Feld-Ebene machen, gewinnt bei Konflikten (gleiche ID) der Datensatz mit dem neueren
updated_atZeitstempel. - Soft-Delete: Löschungen werden über das Feld
deleted_atsynchronisiert. Ein gelöschter Bericht wird nicht physisch entfernt, sondern nur ausgeblendet.
Backend API
Das Backend (syncbox/backend/routers/sync.py) bietet einen zentralen Endpunkt /sync.
- Methode:
POST - Payload: Enthält Listen von
reports,events,groups, etc. - Logik:
upsert_item(Update or Insert) für jeden Datensatz.