metis-desk/docs/arquitectura/contratos-http.md
David e3f92fa534 feat: initialize pnpm workspace and add configuration files
- Added pnpm-workspace.yaml to define package structure.
- Created prepare-local-env.py script for local environment setup.
- Introduced tsconfig.json for TypeScript configuration.
- Added turbo.json for task management with Turbo.
2026-10-03 12:36:03 +02:00

1008 B

Contratos HTTP

Zod v4 es la fuente de verdad de los DTOs de entrada y salida. Inferir todos sus tipos mediante z.infer; no escribir interfaces equivalentes.

Ubicación: modules//src/common/dto/request y response. Crear shared solo cuando haya subcontratos estables usados por varias operaciones.

Los nombres expresan recurso y acción: GetHealthRequestSchema, GetHealthRequestDTO, GetHealthResponseSchema y GetHealthResponseDTO.

Distinguir campo omitido, null, cadena vacía y colección vacía. Evitar default y transform en contratos de negocio salvo una necesidad justificada. Usar schemas semánticos para UUID y timestamps ISO. Los decimales exactos viajan como cadenas.

La route valida la entrada una vez; el controller no repite Zod. El navegador valida la respuesta externa antes de consumirla.

Los builders de respuesta se tipan con el DTO inferido exacto; no duplican interfaces Snapshot. Son deterministas y no contienen lógica de negocio ni acceso a repositorios.