Kunden — Kontakte (Sub-Route)
Zweck
Diese Seite dokumentiert die Sub-Route /customers/:id/contacts — eine Liste aller Ansprechpartner eines Kunden. Pflege erfolgt direkt im Kunden-Kontext; Kontakte sind über das polymorphe ContactParent an den Kunden gehaengt.
Der zentrale Kontakt-Stamm liegt unter Kontakte; die hier gezeigten Einträge sind dieselben Datensaetze, gefiltert auf parentType = Customer und parentId = :id.
Voraussetzungen
Berechtigungen (CASL)
| Action | Subject | Wirkung | Keycloak-Rolle |
|---|---|---|---|
view | FE_Customer, Customer | Detail aufrufbar | — |
view/create/update/delete | Contact | Kontakte pflegen | APP_SPEAMCORE_VIEW/CREATE/UPDATE/DELETE_CONTACT |
view/create/delete | ContactParent | Verknuepfung pflegen | APP_SPEAMCORE_VIEW/CREATE/DELETE_CONTACT_PARENT |
Schritt-für-Schritt-Anleitung
- Kunde (
/customers/:id) öffnen → Tab Kontakte. - + Neu öffnet einen
ContactButton-Auswahl-Workflow (NICHT direktes Anlegen) — Anwender entscheidet:- Neuen Kontakt anlegen → erzeugt
Contact+ContactParentmitparentType = Customer,parentId = :id. - Bestehenden Kontakt verknuepfen → erzeugt nur einen neuen
ContactParent-Eintrag, der auf den bestehendenContactzeigt. Sinnvoll, wenn ein Ansprechpartner mehrere Kunden betreut (z. B. Architekt für mehrere Projekte).
- Neuen Kontakt anlegen → erzeugt
- Nach Bestätigung wird automatisch auf das Detail navigiert:
/customers/:id/contacts/:contactParentId.

Wiederverwendbare Konzepte
- Polymorpher Parent-Pattern —
ContactParenthaengt einen Kontakt an N Entitaeten. - Berechtigungen verstehen (CASL)
Verknuepfungen zu anderen Modulen
- Kunden — Eltern-Modul.
- Kontakte — globale Kontakt-Sicht.
- Standorte, Hersteller, Lieferanten, Fahrzeuge, Speamboxes — alle mit eigener Kontakte-Sub-Route, identisches Pattern.
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/contacts?filter[parentType=Customer&parentId=:id] | Liste für Kunden | view Contact |
POST | /api/contacts | Anlegen | create Contact |
POST | /api/contact-parents | Verknuepfung anlegen | create ContactParent |
GET | /api/contact-parents?filter[parentType=Customer] | Verknuepfungen | view ContactParent |
Versionshinweise
- 2026-04-30: Initiale Veroeffentlichung als Sub-Route-Doku.