medusa-bonuses-plugin
Version:
medusa-bonuses-plugin is a Medusa plugin that adds bonus program to Medusa ecommerce stores.
111 lines • 9.81 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class CustomerSubscriber {
constructor({ manager, eventBusService, customerService, bonusService }) {
this.handleCustomerCreated = async (data) => {
const { id } = data;
try {
const customer = await this.customerService_.retrieve(id);
// Создаем бонусный счет для нового клиента
await this.bonusService_.createBonusAccount(customer.id, {
metadata: {
created_at_registration: true,
customer_email: customer.email,
has_account: customer.has_account || false,
creation_source: 'customer_registration'
}
});
console.log(`Bonus account created for customer: ${customer.id}`);
await this.eventBus_.emit("bonus.account.created", {
customer_id: customer.id
});
}
catch (error) {
console.error("Failed to create bonus account:", error);
await this.eventBus_.emit("bonus.account.create_failed", {
customer_id: id,
error: error.message
});
}
};
this.handleCustomerVerified = async (data) => {
const { id } = data;
try {
const customer = await this.customerService_.retrieve(id);
// Пытаемся получить бонусный счет, создаем если не существует
let bonusAccount;
try {
bonusAccount = await this.bonusService_.getBonusAccount(id);
}
catch (error) {
// Если счет не найден, создаем его
bonusAccount = await this.bonusService_.createBonusAccount(id, {
metadata: {
created_at_verification: true,
customer_email: customer.email,
has_account: customer.has_account || false
}
});
}
// Обновляем метаданные бонусного счета
await this.bonusService_.updateBonusAccount(id, {
metadata: {
...bonusAccount.metadata,
email_verified: true,
verified_at: new Date()
}
});
}
catch (error) {
console.error("Failed to update bonus account after verification:", error);
}
};
this.handleCustomerUpdated = async (data) => {
var _a;
const { id } = data;
try {
const customer = await this.customerService_.retrieve(id);
// Пытаемся получить бонусный счет, создаем если не существует
let bonusAccount;
try {
bonusAccount = await this.bonusService_.getBonusAccount(id);
}
catch (error) {
// Если счет не найден, создаем его
bonusAccount = await this.bonusService_.createBonusAccount(id, {
metadata: {
created_at_update: true,
customer_email: customer.email,
has_account: customer.has_account || false
}
});
return;
}
// Обновляем метаданные при изменении важных данных клиента
if (customer.email !== ((_a = bonusAccount.metadata) === null || _a === void 0 ? void 0 : _a.customer_email)) {
await this.bonusService_.updateBonusAccount(id, {
metadata: {
...bonusAccount.metadata,
customer_email: customer.email,
email_updated_at: new Date()
}
});
}
}
catch (error) {
console.error("Failed to sync bonus account with customer update:", error);
}
};
this.manager_ = manager;
this.customerService_ = customerService;
this.bonusService_ = bonusService;
this.eventBus_ = eventBusService;
// Подписываемся на создание клиента
this.eventBus_.subscribe("customer.created", this.handleCustomerCreated.bind(this));
// Подписываемся на подтверждение email клиента
this.eventBus_.subscribe("customer.password_reset", this.handleCustomerVerified.bind(this));
this.eventBus_.subscribe("customer.updated", this.handleCustomerUpdated.bind(this));
}
}
exports.default = CustomerSubscriber;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3Vic2NyaWJlcnMvY3VzdG9tZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQSxNQUFNLGtCQUFrQjtJQU10QixZQUFZLEVBQ1YsT0FBTyxFQUNQLGVBQWUsRUFDZixlQUFlLEVBQ2YsWUFBWSxFQUNiO1FBY0QsMEJBQXFCLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3JDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUE7WUFFbkIsSUFBSSxDQUFDO2dCQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFFekQsMkNBQTJDO2dCQUMzQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtvQkFDdkQsUUFBUSxFQUFFO3dCQUNSLHVCQUF1QixFQUFFLElBQUk7d0JBQzdCLGNBQWMsRUFBRSxRQUFRLENBQUMsS0FBSzt3QkFDOUIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksS0FBSzt3QkFDMUMsZUFBZSxFQUFFLHVCQUF1QjtxQkFDekM7aUJBQ0YsQ0FBQyxDQUFBO2dCQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO2dCQUVqRSxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO29CQUNqRCxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7aUJBQ3pCLENBQUMsQ0FBQTtZQUNKLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxDQUFDLENBQUE7Z0JBQ3ZELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7b0JBQ3ZELFdBQVcsRUFBRSxFQUFFO29CQUNmLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTztpQkFDckIsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQTtRQUVELDJCQUFzQixHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUN0QyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFBO1lBRW5CLElBQUksQ0FBQztnQkFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7Z0JBRXpELDhEQUE4RDtnQkFDOUQsSUFBSSxZQUFZLENBQUE7Z0JBQ2hCLElBQUksQ0FBQztvQkFDSCxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDN0QsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLG1DQUFtQztvQkFDbkMsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUU7d0JBQzdELFFBQVEsRUFBRTs0QkFDUix1QkFBdUIsRUFBRSxJQUFJOzRCQUM3QixjQUFjLEVBQUUsUUFBUSxDQUFDLEtBQUs7NEJBQzlCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxJQUFJLEtBQUs7eUJBQzNDO3FCQUNGLENBQUMsQ0FBQTtnQkFDSixDQUFDO2dCQUVELHVDQUF1QztnQkFDdkMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRTtvQkFDOUMsUUFBUSxFQUFFO3dCQUNSLEdBQUcsWUFBWSxDQUFDLFFBQVE7d0JBQ3hCLGNBQWMsRUFBRSxJQUFJO3dCQUNwQixXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUU7cUJBQ3hCO2lCQUNGLENBQUMsQ0FBQTtZQUNKLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDNUUsQ0FBQztRQUNILENBQUMsQ0FBQTtRQUVELDBCQUFxQixHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTs7WUFDckMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQTtZQUVuQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUV6RCw4REFBOEQ7Z0JBQzlELElBQUksWUFBWSxDQUFBO2dCQUNoQixJQUFJLENBQUM7b0JBQ0gsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUE7Z0JBQzdELENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixtQ0FBbUM7b0JBQ25DLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFO3dCQUM3RCxRQUFRLEVBQUU7NEJBQ1IsaUJBQWlCLEVBQUUsSUFBSTs0QkFDdkIsY0FBYyxFQUFFLFFBQVEsQ0FBQyxLQUFLOzRCQUM5QixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsSUFBSSxLQUFLO3lCQUMzQztxQkFDRixDQUFDLENBQUE7b0JBQ0YsT0FBTTtnQkFDUixDQUFDO2dCQUVELDJEQUEyRDtnQkFDM0QsSUFBSSxRQUFRLENBQUMsS0FBSyxNQUFLLE1BQUEsWUFBWSxDQUFDLFFBQVEsMENBQUUsY0FBYyxDQUFBLEVBQUUsQ0FBQztvQkFDN0QsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRTt3QkFDOUMsUUFBUSxFQUFFOzRCQUNSLEdBQUcsWUFBWSxDQUFDLFFBQVE7NEJBQ3hCLGNBQWMsRUFBRSxRQUFRLENBQUMsS0FBSzs0QkFDOUIsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLEVBQUU7eUJBQzdCO3FCQUNGLENBQUMsQ0FBQTtnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxvREFBb0QsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUM1RSxDQUFDO1FBQ0gsQ0FBQyxDQUFBO1FBaEhDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUE7UUFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUE7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUE7UUFFaEMsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUVuRixpREFBaUQ7UUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzNGLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNyRixDQUFDO0NBc0dGO0FBRUQsa0JBQWUsa0JBQWtCLENBQUEifQ==