@devx-commerce/plugin-product-reviews
Version:
Product Reviews Plugin for Medusa
78 lines • 6.29 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkReviewEligibilityStep = exports.checkReviewEligibilityStepId = void 0;
const utils_1 = require("@medusajs/framework/utils");
const workflows_sdk_1 = require("@medusajs/workflows-sdk");
exports.checkReviewEligibilityStepId = "check-review-eligibility-step";
exports.checkReviewEligibilityStep = (0, workflows_sdk_1.createStep)(exports.checkReviewEligibilityStepId, async (input, { container }) => {
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
const { customer_id, email, phone, product_id } = input;
// 1. Check if VERIFIED_PURCHASES_ONLY config is enabled
const { data: [verifiedPurchasesConfig], } = await query.graph({
entity: "product_review_config",
fields: ["value"],
filters: { key: "VERIFIED_PURCHASES_ONLY" },
});
const requireVerifiedPurchase = verifiedPurchasesConfig?.value === true;
// If verified purchases are not required, user is eligible
if (!requireVerifiedPurchase) {
return new workflows_sdk_1.StepResponse({
eligible: true,
requireVerifiedPurchase,
order_id: null,
order_item_id: null,
message: "User is eligible to review this product",
});
}
// 2. Find customer if not provided directly
let customerId = customer_id;
if (!customerId && (email || phone)) {
const customerFilters = {};
if (email)
customerFilters.email = email;
if (phone)
customerFilters.phone = phone;
const { data: customers } = await query.graph({
entity: "customer",
fields: ["id"],
filters: customerFilters,
});
if (customers.length > 0) {
customerId = customers[0].id;
}
}
// If no customer found, they're not eligible
if (!customerId) {
return new workflows_sdk_1.StepResponse({
eligible: false,
requireVerifiedPurchase,
order_id: null,
order_item_id: null,
message: "Customer not found",
});
}
// 3. Check if customer has purchased the product
const { data: orders } = await query.graph({
entity: "order",
fields: ["id", "items.id", "items.product_id"],
filters: {
customer_id: customerId,
status: utils_1.OrderStatus.COMPLETED,
items: { product_id },
},
});
const eligible = orders.length > 0;
const orderItem = eligible
? orders[0].items.find((item) => item.product_id === product_id)
: null;
return new workflows_sdk_1.StepResponse({
eligible,
requireVerifiedPurchase,
order_id: eligible ? orders[0].id : null,
order_item_id: orderItem?.id || null,
message: eligible
? "User is eligible to review this product"
: "User has not purchased this product",
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stcmV2aWV3LWVsaWdpYmlsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9wcm9kdWN0LXJldmlld3Mvc3RlcHMvY2hlY2stcmV2aWV3LWVsaWdpYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUdtQztBQUNuQywyREFBbUU7QUFpQnRELFFBQUEsNEJBQTRCLEdBQUcsK0JBQStCLENBQUM7QUFFL0QsUUFBQSwwQkFBMEIsR0FBRyxJQUFBLDBCQUFVLEVBSWxELG9DQUE0QixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzdELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQVEsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUV4RCx3REFBd0Q7SUFDeEQsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLHVCQUF1QixDQUFDLEdBQ2hDLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSx1QkFBdUI7UUFDL0IsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRTtLQUM1QyxDQUFDLENBQUM7SUFFSCxNQUFNLHVCQUF1QixHQUFHLHVCQUF1QixFQUFFLEtBQUssS0FBSyxJQUFJLENBQUM7SUFFeEUsMkRBQTJEO0lBQzNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBSSw0QkFBWSxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsdUJBQXVCO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsYUFBYSxFQUFFLElBQUk7WUFDbkIsT0FB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