109 lines
5.3 KiB
Markdown
109 lines
5.3 KiB
Markdown
---
|
|
phase: quick
|
|
plan: 260923-ku6
|
|
type: quick
|
|
autonomous: true
|
|
requirements: []
|
|
---
|
|
|
|
# Quick Task 260923-ku6: Drei Nachbesserungen aus dem Browser-Rundgang (Proxmox-Modul)
|
|
|
|
## Objective
|
|
|
|
Drei im Browser-Rundgang zu Quick-Task 260923-dhh gefundene Fehler beheben, ohne den
|
|
Funktionsumfang sonst zu veraendern:
|
|
|
|
1. „Verbindung testen" prueft den gespeicherten Stand statt der Formularwerte.
|
|
2. Ein frisch angelegter, noch nie abgefragter Server zeigt faelschlich die Sammelmeldung
|
|
„Ein unerwarteter Fehler ist aufgetreten" statt eines ruhigen „noch keine Abfrage"-Zustands.
|
|
3. Die CSS-Klasse `uppercase` faerbt in der Modulseiten-Zeile die ganze Zeile (inkl. Adresse)
|
|
gross statt nur das Produktkuerzel.
|
|
|
|
## Context
|
|
|
|
- Quelle: menschlicher Browser-Rundgang zu `.planning/quick/260923-dhh-proxmox-modul-pve-pbs-und-pmg-anbinden-n/260923-dhh-PLAN.md`.
|
|
- Betroffene Dateien: `apps/api/src/proxmox/proxmox.controller.ts`, `apps/api/src/proxmox/proxmox.service.ts`,
|
|
`apps/api/src/proxmox/dto/proxmox-server.dto.ts`, `apps/web/src/lib/proxmox-api.ts`,
|
|
`apps/web/src/app/(portal)/modules/proxmox/settings/components/ServerForm.tsx`,
|
|
`apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.tsx`,
|
|
`apps/web/src/messages/de.json`, `apps/web/src/messages/en.json`.
|
|
|
|
## Tasks
|
|
|
|
### Task 1: Verbindungstest prueft Formularwerte statt gespeicherten Stand (Befund 1)
|
|
|
|
<task type="auto">
|
|
<files>
|
|
apps/api/src/proxmox/dto/proxmox-server.dto.ts
|
|
apps/api/src/proxmox/proxmox.service.ts
|
|
apps/api/src/proxmox/proxmox.controller.ts
|
|
apps/api/src/proxmox/proxmox.service.spec.ts
|
|
apps/web/src/lib/proxmox-api.ts
|
|
apps/web/src/app/(portal)/modules/proxmox/settings/components/ServerForm.tsx
|
|
apps/web/src/app/(portal)/modules/proxmox/settings/components/ServerForm.test.tsx
|
|
</files>
|
|
<action>
|
|
Backend: neues `TestProxmoxServerDto` (alle Felder optional, wie `UpdateProxmoxServerDto`).
|
|
`POST servers/:id/test` nimmt diesen Body entgegen und mischt ihn mit dem gespeicherten
|
|
Server: pro Feld gilt „im Formular gesendet und nicht leer -> Formularwert, sonst
|
|
gespeicherter Wert" (Geheimnisfelder: nicht gesendet/leer -> gespeicherter, verschluesselter
|
|
Wert bleibt bestehen und wird wie ueblich entschluesselt). Neue Route `POST servers/test`
|
|
(ohne `:id`) fuer die Neuanlage — testet ausschliesslich mit den Formularwerten, ohne
|
|
gespeicherten Fallback. Beide Routen rufen denselben privaten Merge-Baustein auf; dieser
|
|
wird per Unit-Test abgedeckt (leeres Geheimnisfeld -> gespeicherter Wert bleibt; gefuelltes
|
|
Geheimnisfeld -> neuer Wert greift; abgeschaltete Zertifikatspruefung im Formular wird
|
|
uebernommen). Zugangsdaten weiterhin nicht in Log/Antwort (bestehende Riegel unveraendert).
|
|
Frontend: `testServer`/neue `testDraftServer`-Funktion senden immer den vollstaendigen
|
|
aktuellen Formularstand. `ServerForm` zeigt den Testen-Knopf immer (nicht nur nach dem
|
|
Speichern) und waehlt je nach `savedServer` die passende Funktion.
|
|
</action>
|
|
<verify>cd apps/api && pnpm vitest run src/proxmox/proxmox.service.spec.ts && cd ../web && pnpm vitest run src/app/\(portal\)/modules/proxmox/settings/components/ServerForm.test.tsx</verify>
|
|
<done>Ein Test zeigt: gespeicherter Server mit im Formular abgeschalteter Zertifikatspruefung
|
|
-> Testergebnis beruecksichtigt die abgeschaltete Pruefung (nicht mehr `zertifikat`-Fehler).
|
|
Ein zweiter Test zeigt: leer gelassenes Geheimnisfeld nutzt weiterhin den gespeicherten Wert.
|
|
Der Testen-Knopf funktioniert auch ohne gespeicherten Server.</done>
|
|
</task>
|
|
|
|
### Task 2: Ruhiger Zustand fuer "noch nie abgefragt" (Befund 2)
|
|
|
|
<task type="auto">
|
|
<files>
|
|
apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.tsx
|
|
apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.test.tsx
|
|
apps/web/src/messages/de.json
|
|
apps/web/src/messages/en.json
|
|
</files>
|
|
<action>
|
|
Neuer Uebersetzungsschluessel `proxmox.card.notPolledYet` (DE/EN), der auf den Knopf
|
|
„Jetzt aktualisieren" verweist. In `ServerCard`: wenn `status.lastPolledAt === null` (noch
|
|
keine Abfrage gelaufen), erscheint dieser ruhige Hinweis statt des Fehlerblocks — auch wenn
|
|
`status.reachable` false ist (Zustand direkt nach dem Anlegen). Die bestehenden
|
|
Fehlermeldungen (inkl. `unbekannt`) bleiben fuer den Fall `lastPolledAt !== null &&
|
|
!reachable` unveraendert.
|
|
</action>
|
|
<verify>cd apps/web && pnpm vitest run src/app/\(portal\)/modules/proxmox/components/ServerCard.test.tsx</verify>
|
|
<done>Ein Test zeigt: Status mit `lastPolledAt: null, reachable: false, errorKind: null`
|
|
zeigt den ruhigen Hinweistext und NICHT die Meldung "Ein unerwarteter Fehler ist
|
|
aufgetreten". Bestehende Fehlermeldungs-Tests bleiben gruen.</done>
|
|
</task>
|
|
|
|
### Task 3: uppercase nur auf Produktkuerzel (Befund 3)
|
|
|
|
<task type="auto">
|
|
<files>
|
|
apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.tsx
|
|
</files>
|
|
<action>
|
|
`uppercase` von der Zeile auf ein `<span>` um `server.productType` verschieben; die Adresse
|
|
bleibt unveraendert dargestellt.
|
|
</action>
|
|
<verify>cd apps/web && pnpm vitest run src/app/\(portal\)/modules/proxmox/components/ServerCard.test.tsx</verify>
|
|
<done>Adresse erscheint in der Modulseiten-Zeile nicht mehr grossgeschrieben, Produktkuerzel weiterhin schon.</done>
|
|
</task>
|
|
|
|
## Gesamtverifikation
|
|
|
|
Nach allen drei Aufgaben: `pnpm --filter api test`, `pnpm --filter web test`,
|
|
`pnpm type-check`, `pnpm lint`, `pnpm --filter web exec biome check .` (Warnungszahl exakt
|
|
53) muessen unveraendert/gruen sein, keine Container-Neubauten, keine Browser-Pruefung.
|