UNPKG

@devx-commerce/plugin-loyalty

Version:

A starter for Medusa plugins.

103 lines 8.12 kB
"use strict"; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktbG95YWx0eS1vbi1jYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jYXJ0L2FwcGx5LWxveWFsdHktb24tY2FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBNkQ7QUFDN0QscUVBSTJDO0FBQzNDLDREQUlxQztBQUVyQyxxRUFBZ0U7QUFDaEUsK0NBRzRCO0FBRTVCLDBFQUE4RTtBQUM5RSwrRUFBNkU7QUFDN0UsbUVBQWtFO0FBQ2xFLCtFQUcwQztBQU03QixRQUFBLDBCQUEwQixHQUFHLElBQUEsOEJBQWMsRUFDdEQsdUJBQXVCLEVBQ3ZCLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ3ZCLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUN4QyxNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSx5QkFBVTtRQUNsQixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTtRQUM5QixPQUFPLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUU7S0FDdEMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLEdBQUcsSUFBQSx5QkFBUyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFhLENBQUMsQ0FBQztJQUV2RSxJQUFBLHFEQUEwQixFQUFDO1FBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtLQUNXLENBQUMsQ0FBQztJQUV0QyxxREFBcUQ7SUFDckQsSUFBQSx5Q0FBb0IsRUFBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUV0RCxpRUFBaUU7SUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBQSxvREFBeUIsRUFBQztRQUN2QyxJQUFJO0tBQzRDLENBQUMsQ0FBQztJQUVwRCwyQkFBMkI7SUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLHlCQUFTLEVBQ2hDO1FBQ0UsSUFBSTtRQUNKLE1BQU07S0FDUCxFQUNELENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDUCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUcsQ0FDZixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNaLE1BQU0sQ0FDUCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxRQUFRLEdBQUcsV0FBVyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbEUsT0FBTztZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLFVBQVU7WUFDaEIsTUFBTSxFQUFFLFFBQVE7WUFDaEIsa0JBQWtCLEVBQUU7Z0JBQ2xCLElBQUksRUFBRSxPQUFPO2dCQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbEIsV0FBVyxFQUFFLE9BQU87Z0JBQ3BCLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7Z0JBQ3RDLFVBQVUsRUFBRSxRQUFRO2FBQ3JCO1lBQ0QsS0FBSyxFQUFFO2dCQUNMO29CQUNFLFNBQVMsRUFBRSw2Q0FBb0M7b0JBQy9DLFFBQVEsRUFBRSxJQUFJO29CQUNkLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUyxDQUFDLEVBQUUsQ0FBQztpQkFDakM7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQ1QsK0JBQStCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFTLENBQUMsS0FBSztnQkFDN0QsbUJBQW1CLEVBQUUsUUFBUTtnQkFDN0IsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxPQUFPO29CQUNiLEtBQUssRUFBRSxDQUFDO2lCQUNUO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUNGLENBQUM7SUFFRixtQkFBbUI7SUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBQSxpQ0FBb0IsRUFBQztRQUNyQyxnQkFBZ0I7S0FDTyxDQUFDLENBQUM7SUFFM0IsNkJBQTZCO0lBQzdCLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxJQUFBLHlCQUFTLEVBQ2hEO1FBQ0UsSUFBSTtRQUNKLGdCQUFnQjtRQUNoQixTQUFTO0tBQ1YsRUFDRCxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1AsTUFBTSxNQUFNLEdBQUc7WUFDYixHQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztpQkFDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBYztZQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSTtTQUMzQixDQUFDO1FBRUYsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckIsV0FBVyxFQUFFLE1BQU07WUFDbkIsTUFBTSxFQUFFLHdCQUFnQixDQUFDLEdBQUc7WUFDNUIsUUFBUSxFQUFFO2dCQUNSLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQzdCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdEMsbUJBQW1CLEVBQ2pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLElBQUksQ0FBQzthQUN0RDtTQUNGLENBQUM7SUFDSixDQUFDLENBQ0YsQ0FBQztJQUVGLG9EQUE0QixDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLElBQUEsNEJBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRW5ELE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQztRQUMxQixPQUFPLEVBQUUsSUFBSTtRQUNiLE9BQU8sRUFBRSxzQ0FBc0M7S0FDaEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUNGLENBQUMifQ==