Saltar a contenido

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

  1. API HTTP del Integrador: pull autenticado (login → Bearer) + push event-driven a /api/supplier-products/sync
  2. 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.py quedó como código muerto a eliminar.