@devx-commerce/plugin-gati
Version:
Gati ERP integration for Medusa
70 lines • 7.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchShapeData = void 0;
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
const BATCH_SIZE = 50; // Process 50 items at a time
const MAX_RETRIES = 3;
const RETRY_DELAY = 1000; // 1 second delay between retries
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const processBatch = async (erpService, datafor, batch, retryCount = 0) => {
try {
const results = await Promise.all(batch.map(async (transactionId) => {
try {
return await erpService.getMasterData(datafor, transactionId);
}
catch (error) {
console.error(`Error fetching data for ID ${transactionId}:`, error);
return null;
}
}));
// Filter out failed requests
const successfulResults = results.filter((result) => result !== null);
// If we have failed requests and haven't exceeded max retries, retry them
if (results.length !== successfulResults.length &&
retryCount < MAX_RETRIES) {
const failedIds = batch.filter((_, index) => results[index] === null);
console.log(`Retrying ${failedIds.length} failed requests (attempt ${retryCount + 1})`);
await sleep(RETRY_DELAY);
const retryResults = await processBatch(erpService, datafor, failedIds, retryCount + 1);
return [...successfulResults, ...retryResults];
}
return successfulResults;
}
catch (error) {
console.error("Batch processing error:", error);
if (retryCount < MAX_RETRIES) {
console.log(`Retrying entire batch (attempt ${retryCount + 1})`);
await sleep(RETRY_DELAY);
return processBatch(erpService, datafor, batch, retryCount + 1);
}
throw error;
}
};
/**
* Step to fetch style data from ERP system
* This step processes data in batches to avoid timeouts and handle large datasets
* @param input - Contains datafor type and array of transaction IDs
* @param container - Dependency injection container to resolve services
*/
exports.fetchShapeData = (0, workflows_sdk_1.createStep)("fetch-shape-data", async (input, { container }) => {
const erpService = container.resolve("erp");
const { datafor, data } = input;
// Split data into batches
const batches = [];
for (let i = 0; i < data.length; i += BATCH_SIZE) {
batches.push(data.slice(i, i + BATCH_SIZE));
}
console.log(`Processing ${data.length} items in ${batches.length} batches`);
// Process each batch sequentially
const allResults = [];
for (let i = 0; i < batches.length; i++) {
console.log(`Processing batch ${i + 1}/${batches.length}`);
const batchResults = await processBatch(erpService, datafor, batches[i]);
allResults.push(...batchResults);
}
console.log(`Successfully processed ${allResults.length} items`);
return new workflows_sdk_1.StepResponse(allResults.flatMap((innerArray) => innerArray));
}, async (result, { container }) => {
console.log("Something went wrong in fetch-shape-data");
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2gtc2hhcGUtbWFzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zaGFwZS1tYXN0ZXIvc3RlcHMvZmV0Y2gtc2hhcGUtbWFzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUk3RSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyw2QkFBNkI7QUFDcEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLGlDQUFpQztBQUUzRCxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVoRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQ3hCLFVBQTRCLEVBQzVCLE9BQWUsRUFDZixLQUFlLEVBQ2YsVUFBVSxHQUFHLENBQUMsRUFDRSxFQUFFO0lBQ2xCLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixhQUFhLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckUsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLDZCQUE2QjtRQUM3QixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FB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