medusa-bonuses-plugin
Version:
medusa-bonuses-plugin is a Medusa plugin that adds bonus program to Medusa ecommerce stores.
79 lines • 7.63 kB
JavaScript
;
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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