Skip to main content

Librerías compartidas

Las librerías en libs/ son el corazón reutilizable de Apolo. Aquí se definen los contratos, modelos, componentes y utilidades que consumen tanto las APIs backend como los frontends.

Ubicación

libs/
├── ... # Librerías de dominio / técnicas
└── apolo-pcp-gadgets/ # Librería frontend compartida

ℹ️ Nuevas librerías deberían crearse siempre usando los generadores de Seki para mantener consistencia de configuración y secretos.

Tipos de librerías

1. Librerías de dominio

En estas librerías se suelen definir:

  • DTOs y contratos compartidos entre servicios.
  • Esquemas de validación (por ejemplo, con Zod).
  • Modelos de dominio reutilizables.
  • Enumeraciones y constantes de negocio.

Ejemplos de uso:

import { EmailPasswordLoginDto, UserCreateDto, UsersGetDto } from '@apolo-app-platcom-platform/libs';

Estas librerías permiten que todos los servicios (y el frontend) compartan un lenguaje común de datos.

2. Librerías técnicas

Abarcan utilidades como:

  • Helpers para logging y trazabilidad.
  • Clientes HTTP o wrappers para consumo interno.
  • Abstracciones sobre Kafka, MongoDB u otros servicios de infraestructura.
  • Integraciones comunes (por ejemplo, con apolo-rm-access-management o IAM).

3. Librería frontend apolo-pcp-gadgets

apolo-pcp-gadgets es la librería React con:

  • Componentes UI reutilizables (inputs, tablas, filtros, layouts).
  • Hooks compartidos (por ejemplo, para autenticación, permisos, queries comunes).
  • Helpers de diseño alineados a ITDS y a lineamientos visuales de Cencosud.

Se consume desde portal-web (y eventualmente desde otros frontends):

import { AuditTable, DateRangeFilter } from '@apolo-app-platcom-platform/apolo-pcp-gadgets';

Creación de nuevas librerías

Para crear nuevas librerías usa los generadores de Seki:

npx nx g seki:project-library \
--name=my-lib \
--description="Librería compartida"

Esto garantiza que:

  • Se configure el target secrets si aplica.
  • Se registren los metadatos en .seki/.projects.
  • Se cree el project.json de Nx con lint/testing ya configurados.

Buenas prácticas

  • Reutilizar contratos y DTOs desde libs en lugar de redefinirlos en cada API.
  • Mantener las librerías cohesivas: una responsabilidad clara por librería.
  • Evitar dependencias cíclicas entre librerías (usa nx graph para detectar problemas).
  • Documentar el uso de cada librería en Docusaurus cuando sea relevante.