diff --git a/docs/anleitung/bilder/host-detail-desktop.png b/docs/anleitung/bilder/host-detail-desktop.png new file mode 100644 index 0000000..b15493b Binary files /dev/null and b/docs/anleitung/bilder/host-detail-desktop.png differ diff --git a/docs/anleitung/bilder/host-detail-mobil.png b/docs/anleitung/bilder/host-detail-mobil.png new file mode 100644 index 0000000..7f4e23c Binary files /dev/null and b/docs/anleitung/bilder/host-detail-mobil.png differ diff --git a/docs/anleitung/bilder/hosts-desktop.png b/docs/anleitung/bilder/hosts-desktop.png new file mode 100644 index 0000000..55217cd Binary files /dev/null and b/docs/anleitung/bilder/hosts-desktop.png differ diff --git a/docs/anleitung/bilder/hosts-mobil.png b/docs/anleitung/bilder/hosts-mobil.png new file mode 100644 index 0000000..f513d08 Binary files /dev/null and b/docs/anleitung/bilder/hosts-mobil.png differ diff --git a/docs/issues/008-hosts-gruppen.md b/docs/issues/008-hosts-gruppen.md index 4fcc785..d972475 100644 --- a/docs/issues/008-hosts-gruppen.md +++ b/docs/issues/008-hosts-gruppen.md @@ -1,22 +1,56 @@ # #008 Hosts und Hostgruppen -**Status:** offen +**Status:** erledigt **Meilenstein:** v0.1.0 **Labels:** backend, ui -**Geschätzt:** 3 h **Tatsächlich:** – +**Geschätzt:** 3 h **Tatsächlich:** 0,5 h ## Ziel Hosts und Hostgruppen anlegen, bearbeiten, archivieren; Kunden und Tags. ## Aufgaben -- [ ] Liste mit Status (erreichbar, letzter Abgleich, Drift) -- [ ] Formular: Name, Adresse, Port, Gruppen, Tags, Beschreibung, Kunde, Anmeldebenutzer (`sshkv`/`root`) -- [ ] Hostgruppen mit Mitgliedern -- [ ] Hostdetail-Gerüst +- [x] Liste mit Status (erreichbar, letzter Abgleich, Drift) +- [x] Formular: Name, Adresse, Port, Gruppen, Tags, Beschreibung, Kunde, Anmeldebenutzer (`sshkv`/`root`) +- [x] Hostgruppen mit Mitgliedern +- [x] Hostdetail-Gerüst ## Akzeptanzkriterien -- [ ] Leser sieht, Operator/Admin bearbeiten +- [x] Leser sieht, Operator/Admin bearbeiten ## Abhängigkeiten #004 ## Notizen / Entscheidungen +- **Schichtung:** Regeln (zod-Schemas, Status-Ableitung) framework-frei in `src/lib/hosts.ts`; + Services `src/server/services/hosts.ts` / `hostgruppen.ts`, Lesemodelle + `src/server/queries/hosts.ts`, Aktionen `src/server/actions/hosts.ts` / `hostgruppen.ts` + (gemeinsame Hilfen in `actions/formular.ts`, ohne `"use server"`). Die Action prüft vorab für + Feldmeldungen, der Service prüft erneut (Seed, Skripte, spätere Assistenten). +- **Archivieren statt Löschen** (`archiviertAm`). Dabei fallen die Gruppenmitgliedschaften weg + (im Protokoll festgehalten), damit Zuweisungen an Gruppen nie einen archivierten Host + treffen. Archivierte Hosts sind schreibgeschützt und erscheinen in keiner Liste; der Name + bleibt belegt, damit das Protokoll eindeutig bleibt. Wiederherstellen gibt es noch nicht. +- **Hostgruppen löschen** bewusst noch nicht: `PublicVerwendung` hängt per Cascade an der + Gruppe; das Löschen klärt #016 zusammen mit den Verwendungen. +- **Kunde** per Name: unbekannter Name legt den Kunden an (`kunde.angelegt` im Protokoll), + leer = kein Kunde. Gruppen- und Kundennamen erlauben Leerzeichen/Umlaute (reine Anzeige). +- **Protokoll:** `host.angelegt`, `host.geaendert` (nur geänderte Felder als + `{ vorher, nachher }`, ohne Änderung kein Eintrag), `host.archiviert`, + `hostgruppe.angelegt`, `hostgruppe.geaendert` (Mitglieder als `hinzu`/`entfernt`), + `kunde.angelegt`. Demo-Seed schreibt bewusst keine Einträge. +- **Status in der Liste:** nicht erreichbar > Drift (auch bei offenen Abweichungen) > + synchron > unbekannt. Host-Key: ein ausstehender Key geht vor einem vertrauten, damit ein + geänderter Key nicht hinter „bestätigt“ verschwindet. +- **Formulare** senden per `onSubmit` + `startTransition` statt `