Feat #4: Universen: Standardreihenfolge festlegen können #8

Merged
florian.wilde merged 1 commits from feat/4-standardreihenfolge into main 2026-09-01 21:53:34 +00:00
Owner

Welche Reihenfolge beim Öffnen eines Universums erscheint, ließ sich bisher nicht bestimmen. Das Feld isDefault gab es schon und wurde beim Öffnen auch ausgewertet — es fehlte nur der Weg, es zu setzen.

Umgesetzt ist Variante (a) aus dem Issue: der Standard gehört dem Universum, nicht der einzelnen Person. Wer Schreibrecht hat, legt ihn für alle fest — so wie die Reihenfolgen selbst auch geteilt sind. Die Rangfolge bleibt dadurch die schlichte: Adresse schlägt Standard schlägt erste.

Was geändert wurde

  • setDefaultOrder() in src/lib/universes.ts, mit requireWrite. Zurücksetzen und Setzen laufen in einer Transaktion, damit nie zwei Standards nebeneinander stehen.
  • deleteOrder() fängt jetzt den Fall ab, dass die Standardreihenfolge gelöscht wird — dann übernimmt die Erscheinungsreihenfolge, statt dass die Auswahl auf „die erste" fällt.
  • Knopf „Als Standard festlegen" neben den Reitern, sichtbar nur mit Schreibrecht und nur, wenn die aktive Reihenfolge nicht schon Standard ist. Die Standardreihenfolge trägt ein Häkchen; für Screenreader steht „(Standard)" dahinter.
  • PATCH /api/v1/universen/{id} mit {"defaultOrderId": "…"}, dazu docs/API.md und openapi.json.

Eine Absicherung, die nicht offensichtlich ist

Die Domänenschicht leitet das Universum aus der Reihenfolge ab. Ohne Prüfung setzte damit ein PATCH auf Universum A den Standard in Universum B, wenn man dessen Reihenfolge mitschickt. Der Endpunkt prüft deshalb, dass die Reihenfolge zu genau diesem Universum gehört, und antwortet sonst mit 404.

Geprüft

Vier neue Tests: Umstellen samt Eindeutigkeit, Vorrang der Adresse, Rückfall beim Löschen, Rechteprüfung. 56 Tests grün, Typecheck sauber.

Klickweg und Endpunkt gegen einen Produktionsbau durchgespielt:

Schritt Ergebnis
Knopf klicken 200, Meldung „Standardreihenfolge gesetzt", Häkchen wandert
Universum ohne Parameter öffnen die neue Standardreihenfolge führt
?reihenfolge=… schlägt den Standard weiterhin
PATCH mit fremder Reihenfolge 404, Standard bleibt unverändert
PATCH mit eigener Reihenfolge 200, activeOrderId folgt

Bewusst nicht umgesetzt

Die im Issue vorgeschlagene Browser-Erinnerung an die zuletzt gewählte Reihenfolge. Sie wäre eine dritte, unsichtbare Quelle neben Adresse und Standard und macht schwer erklärbar, warum zwei Leute dasselbe Universum verschieden sehen. Lässt sich jederzeit nachreichen.

Closes #4

Welche Reihenfolge beim Öffnen eines Universums erscheint, ließ sich bisher nicht bestimmen. Das Feld `isDefault` gab es schon und wurde beim Öffnen auch ausgewertet — es fehlte nur der Weg, es zu setzen. Umgesetzt ist Variante **(a)** aus dem Issue: der Standard gehört dem Universum, nicht der einzelnen Person. Wer Schreibrecht hat, legt ihn für alle fest — so wie die Reihenfolgen selbst auch geteilt sind. Die Rangfolge bleibt dadurch die schlichte: **Adresse schlägt Standard schlägt erste.** ## Was geändert wurde - **`setDefaultOrder()`** in `src/lib/universes.ts`, mit `requireWrite`. Zurücksetzen und Setzen laufen in einer Transaktion, damit nie zwei Standards nebeneinander stehen. - **`deleteOrder()`** fängt jetzt den Fall ab, dass die Standardreihenfolge gelöscht wird — dann übernimmt die Erscheinungsreihenfolge, statt dass die Auswahl auf „die erste" fällt. - **Knopf „Als Standard festlegen"** neben den Reitern, sichtbar nur mit Schreibrecht und nur, wenn die aktive Reihenfolge nicht schon Standard ist. Die Standardreihenfolge trägt ein Häkchen; für Screenreader steht „(Standard)" dahinter. - **`PATCH /api/v1/universen/{id}`** mit `{"defaultOrderId": "…"}`, dazu `docs/API.md` und `openapi.json`. ## Eine Absicherung, die nicht offensichtlich ist Die Domänenschicht leitet das Universum aus der Reihenfolge ab. Ohne Prüfung setzte damit ein `PATCH` auf Universum A den Standard in Universum B, wenn man dessen Reihenfolge mitschickt. Der Endpunkt prüft deshalb, dass die Reihenfolge zu genau diesem Universum gehört, und antwortet sonst mit 404. ## Geprüft Vier neue Tests: Umstellen samt Eindeutigkeit, Vorrang der Adresse, Rückfall beim Löschen, Rechteprüfung. **56 Tests grün**, Typecheck sauber. Klickweg und Endpunkt gegen einen **Produktionsbau** durchgespielt: | Schritt | Ergebnis | |---|---| | Knopf klicken | 200, Meldung „Standardreihenfolge gesetzt", Häkchen wandert | | Universum ohne Parameter öffnen | die neue Standardreihenfolge führt | | `?reihenfolge=…` | schlägt den Standard weiterhin | | `PATCH` mit fremder Reihenfolge | 404, Standard bleibt unverändert | | `PATCH` mit eigener Reihenfolge | 200, `activeOrderId` folgt | ## Bewusst nicht umgesetzt Die im Issue vorgeschlagene Browser-Erinnerung an die zuletzt gewählte Reihenfolge. Sie wäre eine dritte, unsichtbare Quelle neben Adresse und Standard und macht schwer erklärbar, warum zwei Leute dasselbe Universum verschieden sehen. Lässt sich jederzeit nachreichen. Closes #4
florian.wilde added 1 commit 2026-09-01 21:50:28 +00:00
Standardreihenfolge je Universum festlegen
CI / pruefen (pull_request) Canceled after 0s
853d56f764
Ein Universum kann mehrere Reihenfolgen haben, aber welche beim Oeffnen
erschien, liess sich nicht bestimmen — es war immer die
Erscheinungsreihenfolge. Das Feld isDefault gab es schon und wurde beim
Oeffnen auch ausgewertet; es fehlte nur der Weg, es zu setzen.

Der Standard gehoert dem Universum, nicht der einzelnen Person: wer
Schreibrecht hat, legt ihn fuer alle fest — so wie die Reihenfolgen selbst
auch geteilt sind. Die Rangfolge bleibt dadurch die schlichte: die Adresse
schlaegt den Standard schlaegt die erste.

setDefaultOrder() setzt zurueck und neu in einer Transaktion, damit nie zwei
Standards nebeneinander stehen. deleteOrder() faengt jetzt den Fall ab, dass
die Standardreihenfolge geloescht wird — dann uebernimmt die
Erscheinungsreihenfolge, statt dass die Auswahl auf "die erste" faellt.

Ueber die Schnittstelle geht es per PATCH /api/v1/universen/{id}. Der
Endpunkt prueft, dass die Reihenfolge zu genau diesem Universum gehoert:
ohne das setzte ein PATCH auf A den Standard in B, weil die Domaenenschicht
das Universum aus der Reihenfolge ableitet.

Vier Tests dazu: Umstellen samt Eindeutigkeit, Vorrang der Adresse,
Rueckfall beim Loeschen, Rechtepruefung. Klickweg und Endpunkt gegen einen
Produktionsbau geprueft.

Refs #4
florian.wilde merged commit 5673055216 into main 2026-09-01 21:53:34 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/flimmer#8