--- 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) 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 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. 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 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. ### Task 2: Ruhiger Zustand fuer "noch nie abgefragt" (Befund 2) 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 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. cd apps/web && pnpm vitest run src/app/\(portal\)/modules/proxmox/components/ServerCard.test.tsx 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. ### Task 3: uppercase nur auf Produktkuerzel (Befund 3) apps/web/src/app/(portal)/modules/proxmox/components/ServerCard.tsx `uppercase` von der Zeile auf ein `` um `server.productType` verschieben; die Adresse bleibt unveraendert dargestellt. cd apps/web && pnpm vitest run src/app/\(portal\)/modules/proxmox/components/ServerCard.test.tsx Adresse erscheint in der Modulseiten-Zeile nicht mehr grossgeschrieben, Produktkuerzel weiterhin schon. ## 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.