@devx-commerce/strapi-x-custom-jw-mayave
Version:
Medusa plugin for Strapi as CMS - JW Mayave Custom Release
100 lines • 8.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.config = void 0;
exports.default = strapiProductsSyncHandler;
const utils_1 = require("@medusajs/framework/utils");
const upsert_products_strapi_1 = require("../workflows/upsert-products-strapi");
async function strapiProductsSyncHandler({ event, container, }) {
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
logger.info("Starting Strapi products sync with improved error handling");
try {
const batchSize = 100;
let hasMore = true;
let offset = 0;
let totalCount = 0;
let successCount = 0;
let errorCount = 0;
while (hasMore) {
try {
const { data: products, metadata: { count } = {} } = await query.graph({
entity: "product",
fields: [
"id",
"title",
"type.value",
"status",
"handle",
"variants.*",
"metadata",
],
pagination: {
skip: offset,
take: batchSize,
},
});
if (products.length) {
logger.info(`Processing batch of ${products.length} products (offset: ${offset})`);
// Process each product individually to handle errors gracefully
for (const product of products) {
try {
// // Import the workflow dynamically to avoid circular dependencies
// const { upsertProductsStrapiWorkflow } = await import(
// "@devx-commerce/strapi/workflows/upsert-products-strapi"
// );
await (0, upsert_products_strapi_1.upsertProductsStrapiWorkflow)(container).run({
input: {
product_ids: [product.id],
},
});
successCount++;
logger.debug(`Successfully synced product: ${product.title} (ID: ${product.id})`);
}
catch (productError) {
errorCount++;
logger.error(`Failed to sync product ${product.title} (ID: ${product.id}): ${productError instanceof Error
? productError.message
: String(productError)}`);
if (productError instanceof Error && productError.stack) {
logger.error(`Stack trace: ${productError.stack}`);
}
// Continue with next product instead of failing the entire batch
continue;
}
}
}
hasMore = products.length === batchSize;
offset += batchSize;
totalCount = count ?? 0;
}
catch (batchError) {
logger.error(`Failed to process batch at offset ${offset}: ${batchError instanceof Error
? batchError.message
: String(batchError)}`);
if (batchError instanceof Error && batchError.stack) {
logger.error(`Stack trace: ${batchError.stack}`);
}
// Move to next batch instead of stopping
offset += batchSize;
errorCount += batchSize;
continue;
}
}
logger.info(`Strapi products sync completed: Total: ${totalCount}, Successful: ${successCount}, Failed: ${errorCount}, Success Rate: ${totalCount > 0
? `${((successCount / totalCount) * 100).toFixed(2)}%`
: "0%"}`);
}
catch (error) {
logger.error(`Strapi products sync failed with critical error: ${error instanceof Error ? error.message : String(error)}`);
if (error instanceof Error && error.stack) {
logger.error(`Stack trace: ${error.stack}`);
}
logger.error(`Event data: ${JSON.stringify(event?.data)}`);
// Don't throw the error to prevent the event system from retrying
// The error is logged and individual product failures are handled above
}
}
exports.config = {
event: "strapi-products.sync",
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9zeW5jLXByb2R1Y3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLDRDQXlIQztBQTVIRCxxREFBc0U7QUFDdEUsZ0ZBQW1GO0FBRXBFLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxFQUN0RCxLQUFLLEVBQ0wsU0FBUyxHQUNNO0lBQ2YsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNERBQTRELENBQUMsQ0FBQztJQUUxRSxJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDdEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUNyRSxNQUFNLEVBQUUsU0FBUztvQkFDakIsTUFBTSxFQUFFO3dCQUNOLElBQUk7d0JBQ0osT0FBTzt3QkFDUCxZQUFZO3dCQUNaLFFBQVE7d0JBQ1IsUUFBUTt3QkFDUixZQUFZO3dCQUNaLFVBQVU7cUJBQ1g7b0JBQ0QsVUFBVSxFQUFFO3dCQUNW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