43 lines
1.4 KiB
Markdown
43 lines
1.4 KiB
Markdown
# API Router Procedure-Support Pattern
|
|
|
|
Ziel: Top-Level-Router bleiben dünne tRPC-Kompositionsschichten. Orchestrierung, Audit-Logik und
|
|
zusammengehörige Input-Schemas wandern in ein benachbartes `*-procedure-support.ts` Modul.
|
|
|
|
## Struktur
|
|
|
|
- `router/<domain>.ts`
|
|
Enthält nur Procedure-Wiring, Rollen-Gates und die Delegation an benannte Support-Funktionen.
|
|
- `router/<domain>-procedure-support.ts`
|
|
Enthält:
|
|
- zusammengehörige `zod`-Input-Schemas für Router-Procedures
|
|
- DB-Orchestrierung und Guard-Checks
|
|
- Audit-Aufrufe
|
|
- kleine private Hilfsfunktionen wie `withAuditUser(...)`
|
|
- `router/<domain>-support.ts`
|
|
Bleibt für pure Builder-, Resolver- und Transform-Helfer reserviert.
|
|
|
|
## Teststrategie
|
|
|
|
- `__tests__/<domain>-support.test.ts`
|
|
Deckt reine Helper-Funktionen ab.
|
|
- `__tests__/<domain>-procedure-support.test.ts`
|
|
Deckt Orchestrierung, Audit-Snapshots und Guard-Verhalten ab.
|
|
- `__tests__/<domain>-router.test.ts`
|
|
Deckt echte `createCaller`-Pfade ab und hält den Router als dünne Integrationsschicht ehrlich.
|
|
|
|
## Guardrails
|
|
|
|
- Öffentliche Router-Contracts bleiben stabil.
|
|
- Keine Logik zurück in den Top-Level-Router ziehen.
|
|
- Vorhandene pure Support-Module weiterverwenden statt duplizieren.
|
|
- Slice-Tests gezielt fahren; globales `tsc --noEmit` nur dort nutzen, wo kein fremder Blocker aktiv ist.
|
|
|
|
## Referenz-Slices
|
|
|
|
- `rate-card`
|
|
- `effort-rule`
|
|
- `experience-multiplier`
|
|
- `management-level`
|
|
- `blueprint`
|
|
- `client`
|