# 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.