fix(260923-ku6): Verbindungstest prueft Formularwerte statt gespeicherten Stand
Nachbesserung aus dem Browser-Rundgang zu 260923-dhh (Befund 1): "Verbindung testen" pruefte bislang immer den in der Datenbank gespeicherten Server, nicht das ungespeicherte Formular. Eine im Formular abgeschaltete Zertifikatspruefung oder ein neu eingetipptes Token-Geheimnis wurden dadurch beim Test ignoriert und erst nach "Speichern" wirksam — eine Falle fuer genau den Ablauf, den Nutzer instinktiv waehlen (eintippen, testen, dann erst speichern). Neues `TestProxmoxServerDto` plus Merge-Baustein `resolveEffectiveTestServer` in `ProxmoxService`: normale Felder folgen dem Formular (auch wenn absichtlich geleert), Geheimnisfelder folgen der bestehenden "leer -> gespeicherten Wert behalten"-Regel, weil `ServerForm` sie beim Laden nie aus der Datenbank vorbefuellt. Neue Route `POST servers/test` (ohne `:id`) deckt die Neuanlage ab, wo es noch keinen gespeicherten Server gibt. Der Testen-Knopf steht jetzt immer zur Verfuegung, nicht mehr nur nach dem ersten Speichern. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -13,7 +13,11 @@ import { Role } from '@prisma/client';
|
||||
import { Roles } from '../auth/decorators/roles.decorator';
|
||||
import type { AuthenticatedRequest } from '../auth/types/auth-user';
|
||||
import { UseModule } from '../module-registry/module.guard';
|
||||
import { CreateProxmoxServerDto, UpdateProxmoxServerDto } from './dto/proxmox-server.dto';
|
||||
import {
|
||||
CreateProxmoxServerDto,
|
||||
TestProxmoxServerDto,
|
||||
UpdateProxmoxServerDto,
|
||||
} from './dto/proxmox-server.dto';
|
||||
import { ProxmoxSchedulerService } from './proxmox-scheduler.service';
|
||||
import { ProxmoxService } from './proxmox.service';
|
||||
|
||||
@@ -22,8 +26,12 @@ import { ProxmoxService } from './proxmox.service';
|
||||
* `domaincheck.controller.ts`) — Aktivierung UND Freigabe. `tenantId` kommt
|
||||
* ausschliesslich aus `req.tenantId` (gesetzt vom `TenantGuard`), nie aus
|
||||
* Body oder Query. Lesen (`GET servers`) steht jedem Benutzer mit
|
||||
* Modulzugriff offen; Schreiben (`POST servers`, `POST servers/:id/poll`,
|
||||
* `POST servers/:id/test`) zusaetzlich `@Roles(ADMIN, SUPER_ADMIN)` (T-DHH-05).
|
||||
* Modulzugriff offen; Schreiben (`POST servers`, `POST servers/test`,
|
||||
* `POST servers/:id/poll`, `POST servers/:id/test`) zusaetzlich
|
||||
* `@Roles(ADMIN, SUPER_ADMIN)` (T-DHH-05). `servers/test` (statisch, zwei
|
||||
* Segmente) und `servers/:id/test` (drei Segmente) ueberschneiden sich
|
||||
* nicht — beide POST, aber unterschiedliche Segmentzahl, deshalb keine
|
||||
* Reihenfolge-Abhaengigkeit (anders als `GET :id` vs. statische Routen).
|
||||
*/
|
||||
@Controller('modules/proxmox')
|
||||
@UseModule('proxmox')
|
||||
@@ -85,13 +93,31 @@ export class ProxmoxController {
|
||||
}
|
||||
|
||||
/**
|
||||
* Verbindungstest (Aufgabe 4, `<behavior>`): liefert bei Erfolg eine
|
||||
* Erfolgsmeldung und bei Misserfolg einen der sieben Fehlerschluessel
|
||||
* samt kurzer Ergaenzung, OHNE den Zwischenlagerstand zu ueberschreiben.
|
||||
* Verbindungstest fuer einen gespeicherten Server (Aufgabe 4, `<behavior>`;
|
||||
* Nachbesserung Befund 1: `dto` traegt den aktuellen Formularstand,
|
||||
* `ProxmoxService.testConnection` prueft diesen statt blind des
|
||||
* gespeicherten Stands). Liefert bei Erfolg eine Erfolgsmeldung und bei
|
||||
* Misserfolg einen der sieben Fehlerschluessel samt kurzer Ergaenzung,
|
||||
* OHNE den Zwischenlagerstand zu ueberschreiben.
|
||||
*/
|
||||
@Post('servers/:id/test')
|
||||
@Roles(Role.ADMIN, Role.SUPER_ADMIN)
|
||||
async test(@Req() req: AuthenticatedRequest, @Param('id') id: string) {
|
||||
return this.proxmoxService.testConnection(this.requireTenantId(req), id);
|
||||
async test(
|
||||
@Req() req: AuthenticatedRequest,
|
||||
@Param('id') id: string,
|
||||
@Body() dto: TestProxmoxServerDto,
|
||||
) {
|
||||
return this.proxmoxService.testConnection(this.requireTenantId(req), id, dto);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verbindungstest waehrend der Neuanlage (Nachbesserung Befund 1): es gibt
|
||||
* noch keinen gespeicherten Server, `dto` ist deshalb die einzige Quelle.
|
||||
*/
|
||||
@Post('servers/test')
|
||||
@Roles(Role.ADMIN, Role.SUPER_ADMIN)
|
||||
async testDraft(@Req() req: AuthenticatedRequest, @Body() dto: TestProxmoxServerDto) {
|
||||
this.requireTenantId(req);
|
||||
return this.proxmoxService.testDraftConnection(dto);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user