2 KiB
Executable file
2 KiB
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
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).
import {
createContentSchema,
listContentQuerySchema,
type CreateContentInput,
type ContentItem,
} from '@shared/schemas';
Validar datos de formulario o query params:
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:
cd backend && npm run test
Cobertura: casos válidos e inválidos para common, content, drugs, glossary, media y validation.
Nota técnica
updateContentSchemaen content no usa.partial()sobrecreateContentSchemaporque Zod 4 no permite.partial()en schemas que tienen refinements. Se define como objeto con todos los campos opcionales másidobligatorio ysuperRefinepara type/content.