UNPKG

medusa-bonuses-plugin

Version:

medusa-bonuses-plugin is a Medusa plugin that adds bonus program to Medusa ecommerce stores.

79 lines 7.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const bonus_transaction_1 = require("../models/bonus-transaction"); class OrderSubscriber { constructor({ eventBusService, bonusService, orderService }) { this.handleOrderCompleted = async (data) => { var _a; try { const { id } = data; const order = await this.orderService_.retrieve(id, { relations: [ "customer", "items", "items.variant", "items.variant.product", "discounts" ] }); // Проверяем, имеет ли заказ бонусную скидку const bonusDiscount = (_a = order.discounts) === null || _a === void 0 ? void 0 : _a.find(d => { var _a; return ((_a = d.metadata) === null || _a === void 0 ? void 0 : _a.type) === "bonus_discount"; }); // Если использовались бонусы, финализируем их использование if (bonusDiscount) { await this.bonusService_.spendOnOrder(order.id, order.customer_id, bonusDiscount.metadata.bonus_amount); } // Начисляем бонусы за заказ const bonusAmount = await this.bonusService_.calculateOrderBonus(order); if (bonusAmount > 0) { await this.bonusService_.addOrderEarning(order.id, order.customer_id, bonusAmount); console.log(`Order bonus calculated: ${bonusAmount} for order ${order.id}`); } } catch (error) { console.error("Error handling order completion for bonus system:", error); } }; this.handleOrderCanceled = async (data) => { try { const { id } = data; // Получаем все транзакции, связанные с заказом const transactions = await this.bonusService_.getOrderRelatedTransactions(id); // Если были потрачены бонусы, возвращаем их if (transactions.spendings) { await this.bonusService_.createTransaction({ customer_id: transactions.spendings.customer_id, amount: Math.abs(transactions.spendings.amount), type: bonus_transaction_1.BonusTransactionType.ADJUSTMENT, note: `Refund of bonus points for canceled order ${id}`, metadata: { original_spending_id: transactions.spendings.id, canceled_order_id: id } }); } // Если были начислены бонусы, отменяем их if (transactions.earnings) { await this.bonusService_.createTransaction({ customer_id: transactions.earnings.customer_id, amount: -transactions.earnings.amount, type: bonus_transaction_1.BonusTransactionType.ADJUSTMENT, note: `Reversal of bonus points for canceled order ${id}`, metadata: { original_earning_id: transactions.earnings.id, canceled_order_id: id } }); } } catch (error) { console.error("Error handling order cancellation for bonus system:", error); } }; this.bonusService_ = bonusService; this.orderService_ = orderService; eventBusService.subscribe("order.completed", this.handleOrderCompleted.bind(this)); eventBusService.subscribe("order.canceled", this.handleOrderCanceled.bind(this)); } } exports.default = OrderSubscriber; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3Vic2NyaWJlcnMvb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxtRUFBbUU7QUFHbkUsTUFBTSxlQUFlO0lBSWpCLFlBQVksRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLFlBQVksRUFDYjtRQWVELHlCQUFvQixHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTs7WUFDcEMsSUFBSSxDQUFDO2dCQUNILE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUE7Z0JBRW5CLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO29CQUNsRCxTQUFTLEVBQUU7d0JBQ1QsVUFBVTt3QkFDVixPQUFPO3dCQUNQLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2QixXQUFXO3FCQUNaO2lCQUNGLENBQUMsQ0FBQTtnQkFFRiw0Q0FBNEM7Z0JBQzVDLE1BQU0sYUFBYSxHQUFHLE1BQUEsS0FBSyxDQUFDLFNBQVMsMENBQUUsSUFBSSxDQUN6QyxDQUFDLENBQUMsRUFBRSxXQUFDLE9BQUEsQ0FBQSxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLElBQUksTUFBSyxnQkFBZ0IsQ0FBQSxFQUFBLENBQzNDLENBQUE7Z0JBRUQsNERBQTREO2dCQUM1RCxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUNuQyxLQUFLLENBQUMsRUFBRSxFQUNSLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLGFBQWEsQ0FBQyxRQUFRLENBQUMsWUFBc0IsQ0FDOUMsQ0FBQTtnQkFDSCxDQUFDO2dCQUVELDRCQUE0QjtnQkFDNUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUN2RSxJQUFJLFdBQVcsR0FB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