codigo0/docs/SCHEMAS_ZOD_COMPARTIDOS.md

2 KiB

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

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