@devx-commerce/plugin-product-reviews
Version:
Product Reviews Plugin for Medusa
43 lines • 3.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.config = void 0;
exports.default = refreshAllProductReviewStats;
const utils_1 = require("@medusajs/framework/utils");
const refresh_product_review_stats_1 = require("../workflows/product-reviews/workflows/refresh-product-review-stats");
/**
* Scheduled job that runs at 3 AM every night to refresh product review stats for all products
*/
async function refreshAllProductReviewStats(container) {
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
try {
logger.info("Starting nightly product review stats refresh...");
// Get all product IDs
const { data: products } = await query.graph({
entity: "product",
fields: ["id"],
});
const productIds = products.map((product) => product.id);
// Process in batches of 50 to avoid memory issues
const batchSize = 25;
for (let i = 0; i < productIds.length; i += batchSize) {
const batch = productIds.slice(i, i + batchSize);
await (0, refresh_product_review_stats_1.refreshProductReviewStatsWorkflow)(container).run({
input: {
productIds: batch,
},
});
logger.info(`Processed batch ${Math.floor(i / batchSize) + 1} of ${Math.ceil(productIds.length / batchSize)}`);
}
logger.info(`Successfully refreshed review stats for ${productIds.length} products`);
}
catch (error) {
logger.error("Error during nightly product review stats refresh: " + error.message);
throw error;
}
}
exports.config = {
name: "refresh-all-product-review-stats",
schedule: "0 3 * * *", // Run at 3 AM every day
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC1hbGwtcHJvZHVjdC1yZXZpZXctc3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvam9icy9yZWZyZXNoLWFsbC1wcm9kdWN0LXJldmlldy1zdGF0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSwrQ0E0Q0M7QUFuREQscURBQXNFO0FBRXRFLHNIQUF3SDtBQUV4SDs7R0FFRztBQUNZLEtBQUssVUFBVSw0QkFBNEIsQ0FDeEQsU0FBMEI7SUFFMUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUVoRSxzQkFBc0I7UUFDdEIsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDM0MsTUFBTSxFQUFFLFNBQVM7WUFDakIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXpELGtEQUFrRDtRQUNsRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3RELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUVqRCxNQUFNLElBQUEsZ0VBQWlDLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNyRCxLQUFLLEVBQUU7b0JBQ0wsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLElBQUksQ0FDVCxtQkFBbUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQzlELFVBQVUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUM5QixFQUFFLENBQ0osQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUNULDJDQUEyQyxVQUFVLENBQUMsTUFBTSxXQUFXLENBQ3hFLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQ1YscURBQXFELEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FDdEUsQ0FBQztRQUNGLE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBRztJQUNwQixJQUFJLEVBQUUsa0NBQWtDO0lBQ3hDLFFBQVEsRUFBRSxXQUFXLEVBQUUsd0JBQXdCO0NBQ2hELENBQUMifQ==