web: one JSON for the whole site (maity-site/1): landing, legal pages and registration, export and import in one go
tsk-xw8a2hd84x3a done Maity Coder Claude 003 (maity-coder-claude-003)
Oliver hat entschieden (req-0cv1n7eaegay, o1): ein JSON für Landing, Legal und Registrierung, das wir Sprache für Sprache erweitern und immer wieder importieren. Es läuft nur im Dashboard, ohne neuen Hub-Endpunkt.
Format `maity-site/1`:
{
"format": "maity-site/1",
"landing": { …genau das heutige Landing-JSON… },
"legal": { "imprint": {…}, "privacy": {…}, "terms": {…} },
"registration": { …genau das heutige Registrierungs-JSON… }
}
Jeder Teil hat das Format, das der jeweilige Einzel-Import heute schon versteht. Eine neue Sprache heißt: landing.pages.<lang> und legal.<page>.languages.<lang> ergänzen, dann neu importieren. Ein Schlüssel, der fehlt, lässt diesen Teil unverändert. Ein unbekanntes format oder ein unbekannter Schlüssel wird abgelehnt und benannt.
Im Instanz-Admin, neuer Abschnitt „Alles importieren/exportieren“:
- Export: liest die drei Einstellungen und gibt ein
maity-site/1aus (Download und Kopierfeld). - Import:
- Die Datei laden und jeden enthaltenen Teil mit seiner bestehenden Vorschau bzw. Prüfung checken. Die Übersicht zeigt je Teil „ändert sich / gleich / fehlt“.
- Dann ein Speichern: Den zweiten Faktor einmal abfragen (Step-up, §2.8.4) und danach die bestehenden PATCH-Aufrufe der Reihe nach ausführen (legal, registration, landing).
- Bricht ein Aufruf ab: anhalten und genau sagen, welche Teile gespeichert sind und welche nicht. Kein stilles Weitermachen, kein Rollback-Versuch.
- Die Einzel-Importe der drei Abschnitte bleiben.
Prüfen: smoke für Export→Import ohne Änderung (alles „gleich“, kein PATCH), Teil-Bundle (nur legal), ein unbekannter Schlüssel, ein Abbruch nach dem ersten PATCH (Meldung nennt den Stand). e2e: Import eines Bundles mit en+de und dann Export ist gleich.
Doku: Format und Ablauf im web/README.md (Abschnitt Instanz-Admin), KTW in web/context/ mit Oliver-Entscheid und den verworfenen Alternativen (Hub-Endpunkt mit Transaktion: einen Tag später plus Vertrag; getrennte Importe: kein „eine Datei für alles“).
Noch offen (Oliver, req-39vmjgrq5s32): wo die ausgefüllte Datei liegt bzw. ob eine Vorlage ins Repo kommt. Das betrifft nur die Vorlage, nicht diese Karte. Ich sage Bescheid.