codigo0/docs/SCHEMAS_ZOD_COMPARTIDOS.md
planetazuzu 0201f16cf4
Some checks are pending
Auto Deploy to Server / deploy (push) Waiting to run
Update lab configuration 2026-03-22
2026-03-22 22:50:29 +01:00

64 lines
2 KiB
Markdown
Executable file

# Schemas Zod compartidos (TICKET-003)
**Estado:** Completado
**Ubicación:** `backend/src/shared/schemas/`
## Contenido
- **common.ts:** Enums y validaciones comunes (contentStatus, contentPriority, slug, uuid, isoDate, etc.).
- **content.ts:** ContentItem, create/update/list Content, contentId/contentUuid.
- **drugs.ts:** Drug, create/update/list Drugs, validateDose, calculatePediatricDose.
- **glossary.ts:** GlossaryTerm, create/update/list Glossary, searchGlossary.
- **media.ts:** MediaResource, create/update/list Media, uploadMedia.
- **validation.ts:** Revisión médica (submitForReview, approve, reject, publish, pendingContent).
Todos los tipos TypeScript se exportan desde `index.ts`. Además se exportan aliases de entidad: `ContentItem`, `Drug`, `GlossaryTerm`, `MediaResource`.
## Uso en backend
```ts
import {
createContentSchema,
type CreateContentInput,
type ContentItem,
} from '../shared/schemas/content.js';
// o desde el barrel:
import { createContentSchema, type ContentItem } from '../shared/schemas/index.js';
```
## Uso en frontend
El frontend puede reutilizar los mismos schemas mediante el alias `@shared/schemas` (Vite y tsconfig).
```ts
import {
createContentSchema,
listContentQuerySchema,
type CreateContentInput,
type ContentItem,
} from '@shared/schemas';
```
Validar datos de formulario o query params:
```ts
const result = createContentSchema.safeParse(formData);
if (!result.success) {
// result.error.issues
}
```
## Tests
Tests de validación Zod en `backend/src/shared/schemas/__tests__/schemas.validation.test.ts`. Ejecutar desde backend:
```bash
cd backend && npm run test
```
Cobertura: casos válidos e inválidos para common, content, drugs, glossary, media y validation.
## Nota técnica
- `updateContentSchema` en content no usa `.partial()` sobre `createContentSchema` porque Zod 4 no permite `.partial()` en schemas que tienen refinements. Se define como objeto con todos los campos opcionales más `id` obligatorio y `superRefine` para type/content.