@devx-commerce/plugin-loyalty
Version:
A starter for Medusa plugins.
103 lines • 8.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.applyLoyaltyOnCartWorkflow = void 0;
const utils_1 = require("@medusajs/framework/utils");
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
const core_flows_1 = require("@medusajs/medusa/core-flows");
const query_config_1 = require("../../api/store/carts/query-config");
const helper_1 = require("../../utils/helper");
const update_cart_promotion_1 = require("./custom/update-cart-promotion");
const calculate_points_on_cart_1 = require("./steps/calculate-points-on-cart");
const get_cart_promotion_1 = require("./steps/get-cart-promotion");
const validate_customer_exists_1 = require("./steps/validate-customer-exists");
exports.applyLoyaltyOnCartWorkflow = (0, workflows_sdk_1.createWorkflow)("apply-loyalty-on-cart", (input) => {
const { data: carts } = (0, core_flows_1.useQueryGraphStep)({
entity: "cart",
fields: query_config_1.cartFields,
filters: { id: input.cart_id },
options: { throwIfKeyNotFound: true },
});
const cart = (0, workflows_sdk_1.transform)({ carts }, ({ carts }) => carts[0]);
(0, validate_customer_exists_1.validateCustomerExistsStep)({
customer: cart.customer,
});
// Check if loyalty promotion already exists on cart.
(0, get_cart_promotion_1.getCartPromotionStep)({ cart, throwErrorOn: "found" });
// calculate amount that will be used to create loyalty promotion
const amount = (0, calculate_points_on_cart_1.calculatePointsOnCartStep)({
cart,
});
// create promotion payload
const promotionPayload = (0, workflows_sdk_1.transform)({
cart,
amount,
}, (data) => {
const randomStr = Math.random().toString(36).substring(2, 8);
const idSuffix = (data.cart.customer?.id ||
data.cart.id ||
"CART").slice(-6);
const uniqueId = `LOYALTY-${idSuffix}-${randomStr}`.toUpperCase();
return {
code: uniqueId,
type: "standard",
status: "active",
application_method: {
type: "fixed",
value: data.amount,
target_type: "order",
currency_code: data.cart.currency_code,
allocation: "across",
},
rules: [
{
attribute: helper_1.CUSTOMER_ID_PROMOTION_RULE_ATTRIBUTE,
operator: "eq",
values: [data.cart.customer.id],
},
],
campaign: {
name: uniqueId,
description: "Loyalty points promotion for " + data.cart.customer.email,
campaign_identifier: uniqueId,
budget: {
type: "usage",
limit: 1,
},
},
};
});
// create promotion
const promotion = (0, core_flows_1.createPromotionsStep)([
promotionPayload,
]);
// update cart with promotion
const { metadata, ...updatePromoData } = (0, workflows_sdk_1.transform)({
cart,
promotionPayload,
promotion,
}, (data) => {
const promos = [
...(data.cart.promotions
?.map((promo) => promo?.code)
.filter(Boolean) || []),
data.promotionPayload.code,
];
return {
cart_id: data.cart.id,
promo_codes: promos,
action: utils_1.PromotionActions.ADD,
metadata: {
...(data.cart.metadata || {}),
loyalty_promo_id: data.promotion[0].id,
loyalty_amount_used: data.promotion?.[0]?.application_method?.value || 0,
},
};
});
update_cart_promotion_1.updateCartPromotionsWorkflow.runAsStep({ input: updatePromoData });
(0, core_flows_1.updateCartsStep)([{ id: input.cart_id, metadata }]);
return new workflows_sdk_1.WorkflowResponse({
success: true,
message: "Loyalty applied on cart successfully",
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktbG95YWx0eS1vbi1jYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jYXJ0L2FwcGx5LWxveWFsdHktb24tY2FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBNkQ7QUFDN0QscUVBSTJDO0FBQzNDLDREQUlxQztBQUVyQyxxRUFBZ0U7QUFDaEUsK0NBRzRCO0FBRTVCLDBFQUE4RTtBQUM5RSwrRUFBNkU7QUFDN0UsbUVBQWtFO0FBQ2xFLCtFQUcwQztBQU03QixRQUFBLDBCQUEwQixHQUFHLElBQUEsOEJBQWMsRUFDdEQsdUJBQXVCLEVBQ3ZCLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ3ZCLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUN4QyxNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSx5QkFBVTtRQUNsQixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTtRQUM5QixPQUFPLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUU7S0FDdEMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLEdBQUcsSUFBQSx5QkFBUyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFhLENBQUMsQ0FBQztJQUV2RSxJQUFBLHFEQUEwQixFQUFDO1FBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtLQUNXLENBQUMsQ0FBQztJQUV0QyxxREFBcUQ7SUFDckQsSUFBQSx5Q0FBb0IsRUFBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUV0RCxpRUFBaUU7SUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBQSxvREFBeUIsRUFBQztRQUN2QyxJQUFJO0tBQzRD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