From e3eca46e0e8fd8ee8155d8dfe223a9d9d1d906d6 Mon Sep 17 00:00:00 2001 From: Cristian Felipe Cruz Buitron Date: Wed, 26 Aug 2026 16:04:59 -0500 Subject: [PATCH] Fase 2 fix: indexar precio crudo (variants.prices), no calculated_price Encontrado en vivo (gate de verificacion de Fase 2): el job de sync inicial del plugin fallaba en TODOS los productos con "Method calculatePrices requires currency_code in the pricing context" -- variants.calculated_price necesita region_id/currency_code en el contexto de query.graph, que el workflow interno del plugin (sync-products.js) no provee. Las categorias si indexaron bien (21), solo productos fallaba, por eso numberOfDocuments quedaba en 0 pese a que el indice y sus settings se crearon correctamente. variants.prices (lista cruda, sin resolver promociones/reglas de precio) no requiere ese contexto y alcanza para el filtro/orden por precio de la busqueda -- no necesitamos el precio final promocional ahi, esa resolucion ya la hace la ruta /store/search via query.graph con el contexto real al re-hidratar los productos. --- workloads/commerce-backend/medusa-config.ts | 25 ++++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/workloads/commerce-backend/medusa-config.ts b/workloads/commerce-backend/medusa-config.ts index ee68289..f6863e7 100644 --- a/workloads/commerce-backend/medusa-config.ts +++ b/workloads/commerce-backend/medusa-config.ts @@ -47,7 +47,10 @@ async function meilisearchProductTransformer( inventory_quantity?: number | null manage_inventory?: boolean | null allow_backorder?: boolean | null - calculated_price?: { calculated_amount?: number | null } | null + prices?: Array<{ + amount?: number | null + currency_code?: string | null + }> | null }> | null | undefined @@ -63,6 +66,18 @@ async function meilisearchProductTransformer( variant.manage_inventory === false || (variant.inventory_quantity ?? 0) > 0 + // variants.calculated_price requiere currency_code/region_id en el + // contexto de pricing, que el workflow de sync interno del plugin no + // provee -- hace fallar TODO el job de indexado (confirmado en vivo: + // "Method calculatePrices requires currency_code in the pricing + // context"). variants.prices es la lista cruda de precios (sin + // resolver promociones/reglas), no necesita contexto -- alcanza para + // el filtro/orden por precio en la busqueda, que no necesita el + // precio final promocional. + const copPrice = variant?.prices?.find( + (price) => price.currency_code?.toLowerCase() === "cop", + ) + return { id: document.id, name: document.title || "Producto ARI Shopping", @@ -73,10 +88,7 @@ async function meilisearchProductTransformer( brand: stringMetadata(metadata, "brand") || "ARI Shopping", ageRange: stringMetadata(metadata, "ageRange") || "Todas", tags: (tags || []).map((tag) => tag.value).filter(Boolean), - price: - typeof variant?.calculated_price?.calculated_amount === "number" - ? variant.calculated_price.calculated_amount - : null, + price: typeof copPrice?.amount === "number" ? copPrice.amount : null, available, isNew: booleanMetadata(metadata, "isNew"), featured: booleanMetadata(metadata, "featured"), @@ -184,7 +196,8 @@ module.exports = defineConfig({ "variants.inventory_quantity", "variants.manage_inventory", "variants.allow_backorder", - "variants.calculated_price.calculated_amount", + "variants.prices.amount", + "variants.prices.currency_code", ], indexSettings: { // Tabla de ADR 0006 ยง3: Buscable / Filtrable-faceta / Ordenable.