UNPKG

@rokmohar/medusa-plugin-meilisearch

Version:
85 lines 7.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.syncProductsStep = void 0; const workflows_sdk_1 = require("@medusajs/workflows-sdk"); const utils_1 = require("@medusajs/utils"); const meilisearch_1 = require("../../modules/meilisearch"); exports.syncProductsStep = (0, workflows_sdk_1.createStep)('sync-products', async ({ filters, batchSize = 1000 }, { container }) => { const queryService = container.resolve(utils_1.ContainerRegistrationKeys.QUERY); const meilisearchService = container.resolve(meilisearch_1.MEILISEARCH_MODULE); const productFields = await meilisearchService.getFieldsForType(utils_1.SearchUtils.indexTypes.PRODUCTS); const productIndexes = await meilisearchService.getIndexesByType(utils_1.SearchUtils.indexTypes.PRODUCTS); const allProductIds = []; let offset = 0; let hasMore = true; while (hasMore) { const { data: products } = await queryService.graph({ entity: 'product', fields: productFields, pagination: { take: batchSize, skip: offset, }, filters: { status: 'published', ...filters, }, }); if (products.length === 0) { hasMore = false; break; } await Promise.all(productIndexes.map(async (index) => { return meilisearchService.addDocuments(index, products, utils_1.SearchUtils.indexTypes.PRODUCTS, { container }); })); allProductIds.push(...products.map((p) => { return p.id; })); offset += batchSize; if (products.length < batchSize) { hasMore = false; } } const validProductIds = new Set(allProductIds); const productsToDelete = new Set(); for (const index of productIndexes) { let indexOffset = 0; let hasMoreIndexed = true; while (hasMoreIndexed) { const indexedResult = await meilisearchService.search(index, '', { attributesToRetrieve: ['id'], paginationOptions: { offset: indexOffset, limit: batchSize, }, }); if (indexedResult.hits.length === 0) { hasMoreIndexed = false; break; } indexedResult.hits.forEach((hit) => { if (!validProductIds.has(hit.id)) { productsToDelete.add(hit.id); } }); indexOffset += batchSize; if (indexedResult.hits.length < batchSize) { hasMoreIndexed = false; } } } if (productsToDelete.size > 0) { const orphanedIds = Array.from(productsToDelete); for (let i = 0; i < orphanedIds.length; i += batchSize) { const batch = orphanedIds.slice(i, i + batchSize); await Promise.all(productIndexes.map(async (index) => { return meilisearchService.deleteDocuments(index, batch); })); } } return new workflows_sdk_1.StepResponse({ totalProcessed: allProductIds.length, totalDeleted: productsToDelete.size, }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3luYy1wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBa0U7QUFDbEUsMkNBQXdFO0FBRXhFLDJEQUFrRjtBQU9yRSxRQUFBLGdCQUFnQixHQUFHLElBQUEsMEJBQVUsRUFDeEMsZUFBZSxFQUNmLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2hFLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkUsTUFBTSxrQkFBa0IsR0FBdUIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQ0FBa0IsQ0FBQyxDQUFBO0lBRXBGLE1BQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsbUJBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDaEcsTUFBTSxjQUFjLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUVqRyxNQUFNLGFBQWEsR0FBaUIsRUFBRSxDQUFBO0lBRXRDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUNkLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQTtJQUVsQixPQUFPLE9BQU8sRUFBRSxDQUFDO1FBQ2YsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDbEQsTUFBTSxFQUFFLFNBQVM7WUFDakIsTUFBTSxFQUFFLGFBQWE7WUFDckIsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxNQUFNO2FBQ2I7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