Appearance
Protokoll-Historie
Die Route app/pages/history.vue zeigt lokal vorhandene Protokolle, serverseitig vorhandene Protokolle ohne lokale Kopie und lokale Protokolle, die auf dem Server fehlen.
Datenquellen
app/composables/protocol/useProtocolHistoryPage.ts orchestriert die Historie.
Verwendete Quellen:
- IndexedDB:
acceptanceHelpers.getAll()für lokal gespeicherte Acceptances - Server:
GET /acceptance/allfür den aktuellen Server-Snapshot - Server:
GET /acceptance/freefür Verträge, aus denen noch Protokolle erstellt werden können
Die lokale Liste wird mit Serverdaten angereichert, wenn ein Server-Snapshot vorhanden ist. Dabei werden Metadaten wie Mieter, Vertrag, Wohnung, Lock-Status und Clone-Quelle aus dem Serverstand übernommen.
Gruppierung
Die sichtbaren lokalen Protokolle werden nach Mieter gruppiert.
HistoryClientGroupCard.vue rendert pro Mieter eine aufklappbare Gruppe. Die einzelnen Zeilen kommen aus HistoryProtocolRow.vue und bieten:
- Öffnen des Protokolls
- lokalen Löschvorgang
- JSON-Export, wenn das Protokoll serverseitig fehlt
Das Öffnen verwendet getAcceptanceRouteLocation(...):
- gesperrte oder pending-upload Acceptances öffnen
/finalize?acceptance=<id> - bearbeitbare Acceptances öffnen
/?acceptance=<id>
Server-Only-Protokolle
remoteOnlyAcceptances enthält Protokolle, die der Server kennt, aber die lokale IndexedDB nicht.
HistoryRemoteOnlyCard.vue zeigt diese Protokolle separat als Server-Protokolle an. Beim Öffnen navigiert die App direkt zur passenden Acceptance-Route. Die eigentliche Hydration läuft anschließend über Middleware, Acceptance-Store und Entity-Sync.
Server-gelöschte lokale Protokolle
Wenn ein Server-Snapshot geladen wurde und eine lokale Acceptance darin fehlt, markiert die Historie den Eintrag als serverDeleted.
Beim Klick auf ein solches Protokoll öffnet HistoryServerDeletedModal.vue statt direkt zu navigieren.
Der Dialog bietet:
- JSON-Export über
useProtocolExport().exportAsJSON(id) - Fortfahren zum lokalen Protokoll
- Abbrechen
Die Sammelaktion im Header löscht alle lokal vorhandenen, serverseitig fehlenden Protokolle aus IndexedDB.
Wenn dagegen beim konkreten Öffnen oder Hydrieren GET /acceptance/<id> mit 404 oder 410 antwortet, gilt der Serverstand als maßgeblich. Die App entfernt die lokale Acceptance inklusive Sektionsdaten aus IndexedDB und leitet nach /history?missingAcceptance=<id> zurück. Die Historie zeigt dazu ein Info-Modal; Editor und Kundenansicht dürfen keine alten lokalen Protokolldaten mehr anzeigen.
Demo-Erstellung
Wenn freie Verträge vorhanden sind, kann die Historie ein Demo-Protokoll erstellen.
Der Flow nimmt den ersten Vertrag mit verfügbaren Typen, erstellt den ersten verfügbaren Typ über useAcceptanceApi().createAcceptance(...), aktualisiert die freien Verträge und navigiert danach direkt in den Editor.
Dieser Pfad ist produktiver UI-Code der Historie; er erzeugt trotzdem echte Acceptances über denselben API-Endpunkt wie /create.
Export
app/composables/protocol/useProtocolExport.ts exportiert lokale Acceptance-Daten als JSON-Datei.
Der Export liest über acceptanceHelpers.exportAsJSON(id), erstellt einen Blob und lädt protokoll-{id}.json herunter. Er ist bewusst ein lokaler Rettungspfad für Protokolle, deren Serverstatus unsicher oder gelöscht ist.