diff --git a/workloads/docs-portal/docs/decisiones/0006-motor-busqueda-facetas.md b/workloads/docs-portal/docs/decisiones/0006-motor-busqueda-facetas.md index 618caf3..117db3a 100644 --- a/workloads/docs-portal/docs/decisiones/0006-motor-busqueda-facetas.md +++ b/workloads/docs-portal/docs/decisiones/0006-motor-busqueda-facetas.md @@ -1,6 +1,6 @@ # ADR 0006 — Motor de búsqueda y filtros facetados (Fase 5, Etapa 3) -**Estado:** propuesta — pendiente de aprobación antes de Etapa 2 (implementación) +**Estado:** aceptada — Etapa 2 en implementación (aprobada 2026-08-26 tras diagnóstico de memoria del host) **Fecha:** 2026-08-25 ## Contexto @@ -254,3 +254,44 @@ Medusa. — no hay migración de datos que deshacer, porque Meilisearch nunca es la fuente de verdad, solo una copia de solo lectura indexada desde Medusa. + +## Nota de implementación (2026-08-26, antes de escribir código de Etapa 2) + +Antes de tocar código se verificó el código fuente real de +`@rokmohar/medusa-plugin-meilisearch` en el tag exacto `v1.4.1` +(`github.com/rokmohar/medusa-plugin-meilisearch`), no su README +genérico ni memoria de entrenamiento — misma disciplina que ya destapó +el bug de `+categories` en `/store/products`. Aparecieron tres +desviaciones reales respecto al diseño de §4/§5 de este ADR: + +1. **No se escribe un subscriber nuevo.** El plugin trae sus propios + subscribers (`meilisearch-product-upsert.ts`, + `meilisearch-category-upsert.ts`, variantes/colección/inventario), + auto-registrados al instalar el paquete — el propio README dice + *"You don't need custom subscribers anymore, you can remove them."* + Escribir `sync-search-index.ts` como describe §4 causaría doble + indexado. La escucha de `product-category.*` que pedía §4 ya viene + incluida en los subscribers del plugin. +2. **Las rutas Store API del plugin no devuelven `facetDistribution`**, + pese a que §5 asume que sí. El servicio interno + (`MeiliSearchService.search()`) sí puede pedirlo vía + `additionalOptions: { facets: [...] }`, pero las rutas + empaquetadas nunca lo piden ni lo reenvían. Se agrega una ruta + Store API propia (`src/api/store/search/route.ts`) que resuelve el + servicio del plugin desde el container y arma + `{ products, facetDistribution }`. Consecuencia positiva no + buscada: Meilisearch queda 100% `ClusterIP`-only, sin Ingress, sin + key pública ni ruta de red navegador→Meilisearch — todo pasa por + Medusa. +3. **El plugin se conecta vía un array `plugins:` nuevo en + `medusa-config.ts`**, no otra entrada en `modules:` (el único + precedente en este repo, el file-provider S3, usa `modules:`), y + usa nombres de env var propios (`MEILISEARCH_HOST`/ + `MEILISEARCH_API_KEY`, leídos por el plugin) distintos del env var + del servidor Meilisearch en sí (`MEILI_MASTER_KEY`, leído por el + contenedor `getmeili/meilisearch`) — mismo valor, dos nombres de + secret. + +Ninguna de las tres cambia la decisión ni sus consecuencias — cambian +el cómo, no el qué. Plan de implementación completo, fase por fase, +en la sesión que aprobó esta Etapa 2 (2026-08-26).