UNPKG

@gorgo/medusa-feed-yandex

Version:

A Medusa plugin that generates a product feed in YML (Yandex Market Language) format

131 lines 12.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.runFeedsWorkflow = exports.GenerateFeedFilesStep = exports.getFeedsStep = void 0; const utils_1 = require("@medusajs/framework/utils"); const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk"); const feed_1 = require("../modules/feed"); const update_feeds_1 = require("./update-feeds"); const delete_feed_files_1 = require("./delete-feed-files"); const yandex_market_language_1 = __importDefault(require("yandex-market-language")); const zlib_1 = require("zlib"); const util_1 = require("util"); exports.getFeedsStep = (0, workflows_sdk_1.createStep)('get-feeds-step', async (ids, { container }) => { const service = container.resolve(feed_1.FEED_MODULE); let feeds; // TODO: create feedDTO types if (ids.length > 0) { feeds = await service.listFeeds({ id: ids }); } else { const now = new Date(); feeds = await service.listFeeds({ is_active: true }); feeds = feeds.filter(feed => { if (!feed.last_export_at) return true; const diffMs = now.getTime() - feed.last_export_at.getTime(); return diffMs >= feed.schedule * 1000 * 60; }); } return new workflows_sdk_1.StepResponse(feeds); }); exports.GenerateFeedFilesStep = (0, workflows_sdk_1.createStep)('generate-feed-files-step', async (feeds, { container }) => { const fileModuleService = container.resolve(utils_1.Modules.FILE); const productModuleService = container.resolve("product"); const generatedFeeds = await Promise.all(feeds.map(async (feed) => { const categoryIds = (feed.settings?.categories ?? []).map(c => c.id); const categoryProductsMap = new Map(); for (const categoryId of categoryIds) { const products = await productModuleService.listProducts({ status: "published", categories: { id: { $in: [categoryId] } }, }); categoryProductsMap.set(categoryId, products); } const offers = []; for (const [categoryId, products] of categoryProductsMap.entries()) { for (const product of products) { const offer = { id: product.id, name: product.title, categoryId: categoryId, }; if (product.thumbnail) { offer.picture = [product.thumbnail]; } if (product.description) { offer.description = product.description; } const weight = parseFloat(product.weight); if (!isNaN(weight)) { offer.weight = weight; } if (product.length && product.width && product.height) { offer.dimensions = [product.length, product.width, product.height]; } if (product.metadata?.barcode && Array.isArray(product.metadata.barcode)) { offer.barcode = product.metadata.barcode; } if (product.metadata?.param && Array.isArray(product.metadata.param)) { offer.param = product.metadata.param; } if (product.origin_country) { offer.country_of_origin = product.origin_country; } if (product.metadata?.manufacturer_warranty === true) { offer.manufacturer_warranty = true; } offers.push(offer); } } const YmlObject = { name: feed.settings?.name || "-", company: feed.settings?.company || "-", url: feed.settings?.url || "-", platform: feed.settings?.platform || "-", categories: feed.settings?.categories || [], offers, }; const ymlString = (0, yandex_market_language_1.default)(YmlObject, { validate: false }).end({ pretty: true }); const ymlBuffer = Buffer.from(ymlString, "utf-8"); const gzipAsync = (0, util_1.promisify)(zlib_1.gzip); const gzipedBuffer = await gzipAsync(ymlBuffer); const fileDTO = await fileModuleService.createFiles({ filename: `${feed.file_name}.xml.gz`, mimeType: "application/gzip", content: gzipedBuffer.toString("base64"), access: "public", }); return ({ id: feed.id, file_id: fileDTO.id, file_url: fileDTO.url }); })); return new workflows_sdk_1.StepResponse(generatedFeeds); }); exports.runFeedsWorkflow = (0, workflows_sdk_1.createWorkflow)('run-feeds-workflow', (input) => { const feed = (0, exports.getFeedsStep)(input.ids); const generatedFeeds = (0, exports.GenerateFeedFilesStep)(feed); const feedsToDelete = (0, workflows_sdk_1.transform)(generatedFeeds, (data) => data.map((item) => { return (item.id); })); delete_feed_files_1.deleteFeedFilesWorkflow.runAsStep({ input: { ids: feedsToDelete }, }); const feedsToUpdate = (0, workflows_sdk_1.transform)(generatedFeeds, (data) => data.map((item) => { return ({ id: item.id, file_path: item.file_url, last_export_at: new Date() }); })); const updatedFeeds = update_feeds_1.updateFeedsWorkflow.runAsStep({ input: feedsToUpdate, }); return new workflows_sdk_1.WorkflowResponse(updatedFeeds); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWZlZWRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9ydW4tZmVlZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscURBQW1EO0FBQ25ELHFFQU8wQztBQUMxQywwQ0FBNkM7QUFFN0MsaURBQW9EO0FBQ3BELDJEQUE2RDtBQUU3RCxvRkFBd0M7QUFDeEMsK0JBQTJCO0FBQzNCLCtCQUFnQztBQUluQixRQUFBLFlBQVksR0FBRyxJQUFBLDBCQUFVLEVBQ3BDLGdCQUFnQixFQUNoQixLQUFLLEVBQUUsR0FBc0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDOUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBb0Isa0JBQVcsQ0FBQyxDQUFBO0lBQ2pFLElBQUksS0FBSyxDQUFBLENBQUMsNkJBQTZCO0lBQ3ZDLElBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUMsQ0FBQztRQUNqQixLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNwRCxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixJQUFHLENBQUMsSUFBSSxDQUFDLGNBQWM7Z0JBQUUsT0FBTyxJQUFJLENBQUE7WUFDcEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDNUQsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFDLFFB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