semillero-INVIMA/diagramas/secuencia-consulta-invima.md

2.0 KiB

Secuencia consulta INVIMA

sequenceDiagram
  actor Usuario
  participant Catalog as CatalogPageComponent
  participant InvimaFE as InvimaService Angular
  participant Interceptor as authInterceptor
  participant Route as GET /api/invima/catalogo
  participant AuthMW as requireAuth
  participant Service as invima/service.js
  participant DB as PostgreSQL

  Usuario->>Catalog: Aplica filtros
  Catalog->>Catalog: applyFilters() reinicia offset
  Catalog->>Catalog: buildQuery()
  Catalog->>InvimaFE: searchCatalog(query)
  InvimaFE->>Interceptor: GET /api/invima/catalogo con HttpParams
  Interceptor->>Route: Authorization Bearer token
  Route->>AuthMW: router.use(requireAuth)
  AuthMW->>DB: SELECT app_sessions JOIN app_users
  DB-->>AuthMW: usuario valido
  AuthMW-->>Route: continua
  Route->>Service: getInvimaCatalog(pool, req.query)
  Service->>Service: parseCatalogFilters()
  Service->>Service: buildCatalogWhere()
  Service->>DB: SELECT COUNT(*) FROM invima_api_catalog WHERE filtros
  DB-->>Service: total
  Service->>DB: SELECT columnas catalogo FROM invima_api_catalog WHERE filtros ORDER BY fecha_vencimiento, producto LIMIT OFFSET
  DB-->>Service: rows
  alt busqueda textual sin resultados y varios tokens
    Service->>Service: fallback_like
    Service->>DB: SELECT COUNT y SELECT con ILIKE por tokens
    DB-->>Service: rows fallback
  end
  Service-->>Route: { items, total, limit, offset }
  Route-->>InvimaFE: respuesta JSON
  InvimaFE-->>Catalog: InvimaCatalogResponse
  Catalog->>Catalog: items.set(), total.set(), loading false
  Catalog-->>Usuario: Presenta registros y paginacion

Archivos analizados

  • semillero/src/app/features/invima/catalog-page.component.ts
  • semillero/src/app/core/services/invima.service.ts
  • semillero/src/app/core/interceptors/auth.interceptor.ts
  • backend/src/routes/invima.routes.js
  • backend/src/middlewares/auth.middleware.js
  • backend/src/auth/auth.service.js
  • backend/invima/service.js
  • backend/src/db/pool.js