From 48c3a7a2fb91e10637daed7264a6d60635491a26 Mon Sep 17 00:00:00 2001 From: guitavano Date: Thu, 13 Feb 2025 13:43:18 -0300 Subject: [PATCH] Tavano/change auctions (#1008) * change auctions * remove cache in module * fix apiList --- linx/loaders/auction/apiList.ts | 18 ++++-------------- linx/loaders/product/list.ts | 14 ++++++-------- linx/loaders/product/listingPage.ts | 12 ++++++------ linx/utils/transform.ts | 9 +++++---- 4 files changed, 21 insertions(+), 32 deletions(-) diff --git a/linx/loaders/auction/apiList.ts b/linx/loaders/auction/apiList.ts index 3a61fd539..6caad0bfb 100644 --- a/linx/loaders/auction/apiList.ts +++ b/linx/loaders/auction/apiList.ts @@ -1,35 +1,25 @@ import { Auction } from "../../utils/types/auctionAPI.ts"; import type { AppContext } from "../../../linx/mod.ts"; -let cachedPromise: Promise | null = null; -let lastUpdate: number = Date.now(); /** * @title Linx Integration * @description Search Wishlist loader */ -const loader = ( +const loader = async ( _props: unknown, _req: Request, ctx: AppContext, ): Promise => { const { layer } = ctx; - if (cachedPromise && Date.now() - lastUpdate < (60 * 1000)) { - return cachedPromise; - } - - lastUpdate = Date.now(); - const responsePromise = layer + const responsePromise = await layer ["POST /v1/Catalog/API.svc/web/SearchProductAuctions"]( {}, // @ts-ignore body is required { body: {} }, - ).then(async (response) => { - return await response.json(); - }); + ); - cachedPromise = responsePromise; - return responsePromise; + return await responsePromise.json(); }; export const cache = "stale-while-revalidate"; diff --git a/linx/loaders/product/list.ts b/linx/loaders/product/list.ts index 1468f4e19..fed75cd6d 100644 --- a/linx/loaders/product/list.ts +++ b/linx/loaders/product/list.ts @@ -39,20 +39,18 @@ const loader = async ( const products = response?.Model?.Grid?.Products ?? []; - const transformedProducts = []; - for (const product of products) { - const transformedProduct = await addAuctions( + const leiloes = await ctx.invoke.linx.loaders.auction.apiList(); + + return products.map((product) => { + return addAuctions( toProduct(product, product.ProductSelection?.SkuID, { cdn, url, currency: "BRL", }), - ctx, + leiloes, ); - transformedProducts.push(transformedProduct); - } - - return transformedProducts; + }); }; export default loader; diff --git a/linx/loaders/product/listingPage.ts b/linx/loaders/product/listingPage.ts index c742cde68..7b9c9440b 100644 --- a/linx/loaders/product/listingPage.ts +++ b/linx/loaders/product/listingPage.ts @@ -78,18 +78,18 @@ const loader = async ( } = forProducts; const { Model: { Grid: { Facets } } } = forProducts; - const products = []; - for (const product of Products) { - const transformedProduct = await addAuctions( + const leiloes = await ctx.invoke.linx.loaders.auction.apiList(); + + const products = Products.map((product) => { + return addAuctions( toProduct(product, product.ProductSelection?.SkuID, { cdn, currency: "BRL", url, }), - ctx, + leiloes, ); - products.push(transformedProduct); - } + }); return { "@type": "ProductListingPage", diff --git a/linx/utils/transform.ts b/linx/utils/transform.ts index 0ada86749..1d29b4bbe 100644 --- a/linx/utils/transform.ts +++ b/linx/utils/transform.ts @@ -31,7 +31,7 @@ import { ProductAuction } from "./types/auctionJSON.ts"; import { Model as ProductAuctionDetail } from "./types/auctionDetailJSON.ts"; import { Product as LinxProductGetByIdJSON } from "./types/productByIdJSON.ts"; import { Associations } from "./types/associationsJSON.ts"; -import type { AppContext } from "../mod.ts"; +import { Auction } from "./types/auctionAPI.ts"; type LinxProductGroup = | LinxProductGroupList @@ -59,9 +59,10 @@ const pickVariant = (variants: LinxProduct[], variantId: number | null) => { return variants[0]; }; -export const addAuctions = async (product: Product, ctx: AppContext) => { - const leiloes = await ctx.invoke.linx.loaders.auction.apiList(); - +export const addAuctions = ( + product: Product, + leiloes: Auction[] | null, +) => { const auctionPropertyIndex = product.additionalProperty?.findIndex( (prop) => prop.name === "id_leilao", );