2.0 KiB
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.tssemillero/src/app/core/services/invima.service.tssemillero/src/app/core/interceptors/auth.interceptor.tsbackend/src/routes/invima.routes.jsbackend/src/middlewares/auth.middleware.jsbackend/src/auth/auth.service.jsbackend/invima/service.jsbackend/src/db/pool.js