From 8992bb7a5d1ade7ad76dfb1d19a2b940a192f481 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Thu, 18 Jun 2026 14:01:35 +0200 Subject: [PATCH] Stressfrei-Adressen: Duplikate beim Anlegen ablehnen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: dieselbe E-Mail-Adresse konnte beim selben Kunden mehrfach angelegt werden – im Screenshot zwei identische Einträge nach einem Doppel-Submit. - createEmail: findFirst auf (customerId, email) case-insensitive, bei Treffer ApiError(409). Eigene Meldung für inaktive Duplikate (Hinweis: alten Eintrag reaktivieren statt neu anlegen). - updateEmail: gleicher Check beim Umbenennen, NOT id-Exclude. - Controller: catch-Blöcke honorieren ApiError.statusCode (vorher pauschal 400) → 409 kommt sauber an die UI durch. - Frontend: updateMutation bekam onError, damit der Fehler nicht schlucken bleibt. --- .../controllers/stressfreiEmail.controller.ts | 6 ++- .../src/services/stressfreiEmail.service.ts | 49 +++++++++++++++++++ docs/todo.md | 14 ++++++ .../src/pages/customers/CustomerDetail.tsx | 3 ++ 4 files changed, 70 insertions(+), 2 deletions(-) diff --git a/backend/src/controllers/stressfreiEmail.controller.ts b/backend/src/controllers/stressfreiEmail.controller.ts index 5817bf24..45529040 100644 --- a/backend/src/controllers/stressfreiEmail.controller.ts +++ b/backend/src/controllers/stressfreiEmail.controller.ts @@ -84,7 +84,8 @@ export async function createEmail(req: Request, res: Response): Promise { }); res.status(201).json({ success: true, data: email } as ApiResponse); } catch (error) { - res.status(400).json({ + const status = error instanceof ApiError ? error.statusCode : 400; + res.status(status).json({ success: false, error: error instanceof Error ? error.message : 'Fehler beim Erstellen der Stressfrei-Wechseln Adresse', } as ApiResponse); @@ -104,7 +105,8 @@ export async function updateEmail(req: AuthRequest, res: Response): Promise { + setProvisionError(err instanceof Error ? err.message : 'Fehler beim Speichern'); + }, }); const handleSubmit = (e: React.FormEvent) => {