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.
This commit is contained in:
1 parent
77a15c26b1
commit
e3eca46e0e
1 file changed
+19
-6
@@ -47,7 +47,10 @@ async function meilisearchProductTransformer(
|
|||||||
inventory_quantity?: number | null
|
inventory_quantity?: number | null
|
||||||
manage_inventory?: boolean | null
|
manage_inventory?: boolean | null
|
||||||
allow_backorder?: boolean | null
|
allow_backorder?: boolean | null
|
||||||
calculated_price?: { calculated_amount?: number | null } | null
|
prices?: Array<{
|
||||||
|
amount?: number | null
|
||||||
|
currency_code?: string | null
|
||||||
|
}> | null
|
||||||
}>
|
}>
|
||||||
| null
|
| null
|
||||||
| undefined
|
| undefined
|
||||||
@@ -63,6 +66,18 @@ async function meilisearchProductTransformer(
|
|||||||
variant.manage_inventory === false ||
|
variant.manage_inventory === false ||
|
||||||
(variant.inventory_quantity ?? 0) > 0
|
(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 {
|
return {
|
||||||
id: document.id,
|
id: document.id,
|
||||||
name: document.title || "Producto ARI Shopping",
|
name: document.title || "Producto ARI Shopping",
|
||||||
@@ -73,10 +88,7 @@ async function meilisearchProductTransformer(
|
|||||||
brand: stringMetadata(metadata, "brand") || "ARI Shopping",
|
brand: stringMetadata(metadata, "brand") || "ARI Shopping",
|
||||||
ageRange: stringMetadata(metadata, "ageRange") || "Todas",
|
ageRange: stringMetadata(metadata, "ageRange") || "Todas",
|
||||||
tags: (tags || []).map((tag) => tag.value).filter(Boolean),
|
tags: (tags || []).map((tag) => tag.value).filter(Boolean),
|
||||||
price:
|
price: typeof copPrice?.amount === "number" ? copPrice.amount : null,
|
||||||
typeof variant?.calculated_price?.calculated_amount === "number"
|
|
||||||
? variant.calculated_price.calculated_amount
|
|
||||||
: null,
|
|
||||||
available,
|
available,
|
||||||
isNew: booleanMetadata(metadata, "isNew"),
|
isNew: booleanMetadata(metadata, "isNew"),
|
||||||
featured: booleanMetadata(metadata, "featured"),
|
featured: booleanMetadata(metadata, "featured"),
|
||||||
@@ -184,7 +196,8 @@ module.exports = defineConfig({
|
|||||||
"variants.inventory_quantity",
|
"variants.inventory_quantity",
|
||||||
"variants.manage_inventory",
|
"variants.manage_inventory",
|
||||||
"variants.allow_backorder",
|
"variants.allow_backorder",
|
||||||
"variants.calculated_price.calculated_amount",
|
"variants.prices.amount",
|
||||||
|
"variants.prices.currency_code",
|
||||||
],
|
],
|
||||||
indexSettings: {
|
indexSettings: {
|
||||||
// Tabla de ADR 0006 §3: Buscable / Filtrable-faceta / Ordenable.
|
// Tabla de ADR 0006 §3: Buscable / Filtrable-faceta / Ordenable.
|
||||||
|
|||||||
Reference in new issue
Block a user