@gorgo/medusa-feed-yandex
Version:
A Medusa plugin that generates a product feed in YML (Yandex Market Language) format
131 lines • 12.5 kB
JavaScript
;
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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