mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
6c583c2f27
- One global ZodValidationPipe (APP_PIPE, createZodValidationPipe) validates
any @Body() typed with a createZodDto class; the custom exception factory
keeps TREK's { error: 'field: message; ...' } envelope byte-identical.
- The 7 piped controllers (collections, places, vacay, todo, health,
airtrail x2) now type bodies with colocated <domain>.dto.ts wrappers —
the Zod schemas in @trek/shared stay the single source of truth.
- OpenAPI: the hand-rolled api-zod.ts enricher is replaced by nestjs-zod's
cleanupOpenApiDoc; request bodies surface as $refs to named DTO schemas.
- validateBodyContracts() runs in buildApp() after init and refuses to boot
when any POST/PUT/PATCH @Body() (including @Body('field') sub-reads) lacks
a ZodDto metatype. The 175 pre-existing legacy handlers are grandfathered
in body-contract-allow-list.ts; the list is ratchet-only — the gate also
throws on stale entries, so migrating a domain forces their removal.
11 lines
504 B
TypeScript
11 lines
504 B
TypeScript
/**
|
|
* Server-side createZodDto wrappers over the @trek/shared AirTrail contracts,
|
|
* so the global ZodValidationPipe (APP_PIPE) validates bodies by metatype —
|
|
* the shared Zod schemas stay the single source of truth.
|
|
*/
|
|
import { createZodDto } from 'nestjs-zod';
|
|
import { airtrailImportSchema, airtrailSettingsSchema } from '@trek/shared';
|
|
|
|
export class AirtrailSettingsDto extends createZodDto(airtrailSettingsSchema) {}
|
|
export class AirtrailImportDto extends createZodDto(airtrailImportSchema) {}
|