@devx-commerce/plugin-loyalty
Version:
A starter for Medusa plugins.
112 lines • 9.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.orderCreateWorkflow = void 0;
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
const core_flows_1 = require("@medusajs/medusa/core-flows");
const workflows_sdk_2 = require("@medusajs/framework/workflows-sdk");
const helper_1 = require("../../utils/helper");
const get_event_1 = require("../cart/steps/get-event");
const get_cart_promotion_1 = require("../cart/steps/get-cart-promotion");
const validate_customer_exists_1 = require("../cart/steps/validate-customer-exists");
const validate_referral_1 = require("../referral/steps/validate-referral");
const create_order_event_1 = require("./steps/create-order-event");
const deduct_order_points_1 = require("./steps/deduct-order-points");
const get_referral_code_from_order_1 = require("./steps/get-referral-code-from-order");
const referral_create_order_event_1 = require("./steps/referral-create-order-event");
const validate_loyalty_1 = require("./steps/validate-loyalty");
exports.orderCreateWorkflow = (0, workflows_sdk_1.createWorkflow)("order-create", ({ order_id }) => {
const { data: orders } = (0, core_flows_1.useQueryGraphStep)({
entity: "order",
fields: [
"id",
"display_id",
"customer.*",
"total",
"cart.*",
"cart.promotions.*",
"cart.promotions.rules.*",
"cart.promotions.rules.values.*",
"cart.promotions.application_method.*",
"metadata",
],
filters: { id: order_id },
options: { throwIfKeyNotFound: true },
});
(0, validate_loyalty_1.validateLoyaltyStep)({
order: orders[0],
});
// Validate customer exists
(0, validate_customer_exists_1.validateCustomerExistsStep)({
customer: orders[0].customer,
});
const loyaltyPointsPromotion = (0, get_cart_promotion_1.getCartPromotionStep)({
cart: orders[0].cart,
});
//====================== Deduct Loyalty Points from Order ======================
(0, workflows_sdk_1.when)(orders, (orders) => (0, helper_1.orderHasLoyaltyPromotion)(orders[0]) &&
!!loyaltyPointsPromotion).then(() => {
(0, deduct_order_points_1.deductPointsFromOrderStep)({
customer_id: orders[0].customer.id,
amount: loyaltyPointsPromotion.application_method.value,
order_id: orders[0].id,
order_display_id: orders[0].display_id,
});
(0, core_flows_1.updatePromotionsStep)([
{
id: loyaltyPointsPromotion.id,
status: "inactive",
},
]);
});
//====================== Add Loyalty Points from Order ======================
const event = (0, get_event_1.getEventStep)({
eventName: "order_placed",
});
const orderPointsResult = (0, workflows_sdk_1.when)(event, (event) => event?.trigger_event === "order_placed").then(() => {
return (0, create_order_event_1.createOrderEventStep)({
customer_id: orders[0].customer.id,
amount: orders[0].total,
order_id: orders[0].id,
order_display_id: orders[0].display_id,
event: event,
});
});
const referralCode = (0, get_referral_code_from_order_1.getReferralCodeFromOrderStep)({
order: orders[0],
});
const response = (0, validate_referral_1.validateReferralStep)({
referral_code: referralCode,
customer_id: orders[0].customer.id,
});
const referralPointsResult = (0, workflows_sdk_1.when)(response, (res) => !!res.valid).then(() => {
return (0, referral_create_order_event_1.referralCreateOrderEventStep)({
customer_id: orders[0].customer.id,
amount: orders[0].total,
order_id: orders[0].id,
order_display_id: orders[0].display_id,
referral: response.referral,
});
});
// Calculate loyalty metadata
const loyaltyMetadata = (0, workflows_sdk_2.transform)({ orders, orderPointsResult, referralPointsResult }, (data) => {
const orderPoints = data.orderPointsResult?.points ?? 0;
const referralPoints = data.referralPointsResult?.points ?? 0;
const totalPointsEarned = orderPoints + referralPoints;
const currentMetadata = data.orders?.[0]?.metadata || {};
const newMetadata = { loyalty_status: "redeemed" };
if (totalPointsEarned > 0) {
newMetadata.loyalty_point_earned = totalPointsEarned;
}
return {
...currentMetadata,
...newMetadata,
};
});
(0, core_flows_1.updateOrdersStep)({
selector: { id: orders[0].id },
update: {
metadata: loyaltyMetadata,
},
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9vcmRlci9vcmRlci1jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscUVBQXlFO0FBQ3pFLDREQUlxQztBQUNyQyxxRUFBOEQ7QUFJOUQsK0NBSTRCO0FBQzVCLHVEQUF1RDtBQUN2RCx5RUFBd0U7QUFDeEUscUZBQW9GO0FBQ3BGLDJFQUEyRTtBQUMzRSxtRUFBa0U7QUFDbEUscUVBQXdFO0FBQ3hFLHVGQUFvRjtBQUNwRixxRkFBbUY7QUFDbkYsK0RBQStEO0FBTWxELFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FBQyxFQUFFLFFBQVEsRUFBaUIsRUFBRSxFQUFFO0lBQzlCLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUN6QyxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixZQUFZO1lBQ1osWUFBWTtZQUNaLE9BQU87WUFDUCxRQUFRO1lBQ1IsbUJBQW1CO1lBQ25CLHlCQUF5QjtZQUN6QixnQ0FBZ0M7WUFDaEMsc0NBQXNDO1lBQ3RDLFVBQVU7U0FDWDtRQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUU7UUFDekIsT0FBTyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFO0tBQ3RDLENBQUMsQ0FBQztJQUVILElBQUEsc0NBQW1CLEVBQUM7UUFDbEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQXlCO0tBQ3pDLENBQUMsQ0FBQztJQUNILDJCQUEyQjtJQUMzQixJQUFBLHFEQUEwQixFQUFDO1FBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtLQUM3QixDQUFDLENBQUM7SUFFSCxNQUFNLHNCQUFzQixHQUFHLElB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