@devx-commerce/plugin-product-reviews
Version:
Product Reviews Plugin for Medusa
89 lines • 8.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.config = void 0;
exports.default = productReviewBulkUploadHandler;
const product_review_1 = require("../modules/product-review");
const download_csv_1 = require("../workflows/product-reviews/workflows/download-csv");
const create_product_review_1 = require("../workflows/product-reviews/workflows/create-product-review");
async function productReviewBulkUploadHandler({ event, container, }) {
const logger = container.resolve("logger");
const productReviewService = container.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
const { csv_url } = event.data;
const { result: reviews } = await (0, download_csv_1.downloadCsvWorkflow)(container).run({
input: { csv_url },
});
// Process reviews in batches to avoid memory issues
const batchSize = 10;
const totalReviews = reviews.length;
let processedCount = 0;
let successCount = 0;
let failedCount = 0;
const errors = [];
logger.info(`Starting bulk upload of ${totalReviews} product reviews`);
for (let i = 0; i < totalReviews; i += batchSize) {
const batch = reviews.slice(i, i + batchSize);
const batchPromises = batch.map((review) => (0, create_product_review_1.createProductReviewWorkflow)(container)
.run({
input: {
product_id: review.product_id,
rating: parseInt(review.rating, 10),
title: review.title || "",
description: review.description || "",
...(review.email && { email: review.email }),
...(review.phone && { phone: review.phone }),
...(review.name && { name: review.name }),
...(review.order_id &&
review.order_item_id && {
order: {
id: review.order_id,
item_id: review.order_item_id,
},
}),
medias: [
...(review?.image_medias?.split(",")?.map((url) => ({
url,
type: "IMAGE",
})) || []),
...(review?.video_medias?.split(",")?.map((url) => ({
url,
type: "VIDEO",
})) || []),
],
},
throwOnError: false,
})
.then(({ errors }) => {
if (errors.length) {
return {
review,
success: false,
error: errors.map(({ error }) => error.message),
};
}
return { review, success: true, error: null };
})
.catch((error) => ({ review, success: false, error })));
const results = await Promise.all(batchPromises);
for (const result of results) {
if (result.success) {
successCount++;
}
else {
failedCount++;
errors.push({
...result.review,
error: result.error || result.error?.message || "Unknown error",
});
}
processedCount++;
}
// Log progress after each batch
logger.info(`Processed ${processedCount}/${totalReviews} reviews. Success: ${successCount}, Failed: ${failedCount}`);
}
console.log("errors: ", errors);
logger.info(`Processing bulk upload of ${reviews.length} product reviews completed. Success: ${successCount}, Failed: ${failedCount}`);
}
exports.config = {
event: "product_review.bulk_upload",
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1yZXZpZXctYnVsay11cGxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvcHJvZHVjdC1yZXZpZXctYnVsay11cGxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBY0EsaURBa0dDO0FBNUdELDhEQUFrRTtBQUVsRSxzRkFBMEY7QUFDMUYsd0dBQTJHO0FBTzVGLEtBQUssVUFBVSw4QkFBOEIsQ0FBQyxFQUMzRCxLQUFLLEVBQ0wsU0FBUyxHQUMyQjtJQUNwQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDNUMsc0NBQXFCLENBQ3RCLENBQUM7SUFDRixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUUvQixNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBQSxrQ0FBbUIsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbkUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFO0tBQ25CLENBQUMsQ0FBQztJQUVILG9EQUFvRDtJQUNwRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDckIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNwQixNQUFNLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFFdkIsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsWUFBWSxrQkFBa0IsQ0FBQyxDQUFDO0lBRXZFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxJ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