ADR-0001 · Integración con el Integrador por API HTTP, no por acceso directo a su base de datos¶
- Estado: aceptado
- Decisores: desarrollador de PC Manager (equipo TI Compulandia)
- Fecha de la decisión: no registrada; el commit
58f6001("event driven syncronization", 2025-05-03) ya implementa el modelo vigente
Contexto y problema¶
PC Manager necesita el catálogo de productos simples del Integrador (stock,
precios, estado) y debe devolverle los combos que arma. En el repo quedó
evidencia de que se evaluó leer directamente la base MySQL del Integrador
(PcManager/services/syncronize.py, hoy sin uso): acoplarse al esquema de
otro sistema, con credenciales de su base, sin pasar por sus validaciones.
Opciones consideradas¶
- API HTTP del Integrador: pull autenticado (login → Bearer) + push
event-driven a
/api/supplier-products/sync - Conexión directa a la base MySQL del Integrador (llegó a prototiparse)
Decisión¶
Toda la integración pasa por la API HTTP del Integrador. El pull usa las
credenciales de un usuario del Integrador (variables USER_* del .env); el
push de combos sale por la señal pre_save + queue_product_sync
(deduplicado, post-commit) hacia /api/supplier-products/sync; y desde
2026-07 el Integrador también empuja cambios en caliente a
POST /api/products/receive (token estático X-API-TOKEN), reduciendo la
ventana de stock desactualizado al round-trip de dos requests. Pasar por la
API mantiene las validaciones y efectos del Integrador (materialización de
recetas, reindexado en Algolia) que un acceso directo a la base saltearía.
Consecuencias¶
Positivas¶
- Contratos explícitos y versionados (ver
docs/integraciones/integrador/). - El Integrador aplica sus propias validaciones y efectos secundarios (warnings de resolución de componentes, reindexado).
- Sin credenciales de la base de otro sistema en este repo.
Negativas / deuda asumida¶
- Dependencia de la disponibilidad de la API: un push fallido no se reintenta y se pierde hasta la próxima reevaluación del combo.
- La autenticación del pull usa credenciales de un usuario real del
Integrador en el
.env, que hay que mantener vigentes. syncronize.pyquedó como código muerto a eliminar.