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
secretssi aplica. - Se registren los metadatos en
.seki/.projects. - Se cree el
project.jsonde 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.