sorted markdown and added favicon
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
# Erstellerkennung und erneutes Einsenden
|
||||
|
||||
Beim App-Start entsteht ein kryptografischer Zufallswert mit 256 Bit über
|
||||
`crypto.getRandomValues()`. Er liegt als 64-stellige Hexadezimalzeichenfolge
|
||||
unter `wegwichtel.creator-id.v1` im Local Storage. Keine Zeitzone, Geräteangaben
|
||||
oder Informationen über den Internetanbieter werden gesammelt. Ein zusätzlicher
|
||||
Hash würde die Eindeutigkeit des Zufallswerts nicht erhöhen.
|
||||
|
||||
Neue Entwürfe bekommen `route.creator_id`; alte lokale Entwürfe bekommen sie
|
||||
beim nächsten Speichern. Beim Einsenden landet sie in `routes.creator_id`.
|
||||
Die API liefert das Feld, die Moderations-CLI zeigt die Ersteller-ID. Bereits
|
||||
zugeordnete Server-Strecken behalten ihren Ersteller bei Änderungen. Strecken
|
||||
älterer Versionen können beim ersten erneuten Einsenden zugeordnet werden.
|
||||
|
||||
## Speicherung und Löschen
|
||||
|
||||
Das Ausschalten des Offline-Speichers, Löschen von Fortschritt, Entwürfen oder
|
||||
Medien löscht die Gerätekennung nicht. Es gibt keine automatische Bereinigung
|
||||
dieses getrennten Speicherschlüssels. Die gezielte Entwicklerfunktion
|
||||
`Wegwichtel.LocalRoutes.forgetCreatorId()` entfernt die Kennung ausschließlich
|
||||
nach ausdrücklich bestätigter Internetbrowser-Abfrage. Es wird kein zusätzlicher
|
||||
Löschbutton in die Kinderoberfläche eingebaut. Nach bestätigtem Löschen entsteht
|
||||
beim nächsten Zugriff eine neue Kennung; vorhandene Strecken behalten ihre alte
|
||||
Erstellerzuordnung. Die App kann das Löschen sämtlicher Website-Daten in den
|
||||
Einstellungen des Internetbrowsers nicht verhindern. Kopierte Browserdaten
|
||||
kopieren auch die Identität; das ist keine Hardware-ID.
|
||||
|
||||
## Aktualisieren einer eingesandten Strecke
|
||||
|
||||
Der lokale Entwurf bleibt erhalten und merkt sich `serverRouteId`,
|
||||
`serverPoiId`, `serverPictureId` und den Audio-Status. Erneutes Einsenden nutzt
|
||||
PUT für bestehende Daten und POST für neue Stationen/Bilder. Entfernte lokale
|
||||
Stationen und Medien werden bei einer erfolgreichen erneuten Übertragung auch
|
||||
auf dem Server entfernt. Bestätigte Server-IDs werden nach jedem Schritt
|
||||
lokal gespeichert, damit ein späterer Fehler nicht zum Neuanlegen der Strecke
|
||||
führt. Der Entwurf bleibt nach Fehlern erneut einsendbar.
|
||||
|
||||
Freigegebene Strecken bleiben unveränderlich. Die Prüfung erfolgt vor der
|
||||
Aktualisierung und zusätzlich in den vorhandenen Server-Schreibprüfungen.
|
||||
Bei älteren Entwürfen fehlen noch die gespeicherten Stations-/Bild-IDs: Beim
|
||||
ersten erneuten Einsenden werden neue Stationen samt Medien angelegt und die
|
||||
alten Stationen anschließend entfernt. Die Strecken-ID bleibt gleich. Deshalb
|
||||
können sich bei dieser einmaligen Übernahme die Stations-IDs ändern.
|
||||
|
||||
Die Übertragung mehrerer Dateien ist keine gemeinsame Transaktion. Bei einem
|
||||
Abbruch können einzelne Änderungen bereits auf dem Server sein. Bei einem
|
||||
verlorenen HTTP-Erfolg nach serverseitigem POST ist zusätzlich eine spätere
|
||||
Idempotenzlösung erforderlich. Parallele Bearbeitung ist noch nicht freigegeben;
|
||||
die aktuelle Übertragung behandelt den lokalen Entwurf als vollständigen Stand.
|
||||
|
||||
## Datenbank und Betrieb
|
||||
|
||||
Das Schema und die Startprüfung enthalten die nullable Spalte
|
||||
`routes.creator_id`. Neue Datenbanken enthalten sie direkt. Es gibt keine
|
||||
automatische Migration einer vorhandenen Datenbank; `npm run init-db` allein
|
||||
fügt einer schon bestehenden Tabelle keine Spalte hinzu. Bestehende Strecken
|
||||
dürfen für diese Änderung nicht gelöscht werden. Für die vorhandene Datenbank
|
||||
ist vor dem Neustart folgende gezielte Schemaergänzung nötig:
|
||||
|
||||
```sql
|
||||
ALTER TABLE routes ADD COLUMN creator_id TEXT;
|
||||
```
|
||||
|
||||
Die Anwendung vorher anhalten und die Datenbank sichern. Den tatsächlichen
|
||||
Datenbankpfad aus `DATA_DIR` in `.env` verwenden. Die Anweisung nur einmal
|
||||
anwenden und anschließend `npm run test:runtime-db` ausführen, dann die App
|
||||
starten. Nicht die Datenbank oder Streckenverzeichnisse löschen.
|
||||
|
||||
## Berechtigungen
|
||||
|
||||
`creator_id` ist Metadatum, kein Passwort und kein Eigentumsnachweis. Eine frei
|
||||
übermittelte Kennung gewährt keine Berechtigung. Bestehende Zugriffsregeln bleiben
|
||||
wirksam. Abgesicherte Eigentumszuordnung, Einladungen und gemeinsame Bearbeitung
|
||||
stehen in [TODO-MODERATION.md](agents/TODO-MODERATION.md) weiterhin aus.
|
||||
|
||||
Die GPS-Aufzeichnung läuft nur innerhalb einer Bearbeitungssitzung. Schließen,
|
||||
Abbrechen, Rückkehr zur Liste, Streckenwechsel und Verlassen der Seite beenden
|
||||
sie; ein Neustart übernimmt keinen aktiven Aufzeichnungszustand. Beim erneuten
|
||||
Öffnen eines lokalen Entwurfs beginnt eine neue Sitzung. Einzelheiten stehen in
|
||||
[GPX-Aufzeichnung.md](agents/GPX-Aufzeichnung.md).
|
||||
Reference in New Issue
Block a user