UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

303 lines (302 loc) 14.2 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createSendOrderMessage = createSendOrderMessage; exports.createReturnOrderMessage = createReturnOrderMessage; exports.createRefundMessage = createRefundMessage; /** * Eメールメッセージビルダー */ const pug = require("pug"); const factory = require("./factory"); function createEmailMessageText(params) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c; const emailTemplate = (_a = params.email) === null || _a === void 0 ? void 0 : _a.template; const emailText = (_b = params.email) === null || _b === void 0 ? void 0 : _b.text; const emailMessageTextByDB = (_c = params.emailMessage) === null || _c === void 0 ? void 0 : _c.text; let emailMessageText; if (typeof emailText === 'string') { emailMessageText = emailText; } else if (typeof emailTemplate === 'string') { emailMessageText = yield new Promise((resolve, reject) => { pug.render(emailTemplate, { order: params.order }, (err, message) => { if (err instanceof Error) { reject(new factory.errors.Argument('emailTemplate', err.message)); return; } resolve(message); }); }); } else if (typeof emailMessageTextByDB === 'string') { // デフォルトEメールメッセージを適用する emailMessageText = yield new Promise((resolve, reject) => { pug.render(emailMessageTextByDB, { order: params.order }, (err, message) => { if (err instanceof Error) { reject(new factory.errors.Argument('emailMessage.text', err.message)); return; } resolve(message); }); }); } else { emailMessageText = `orderNumber: ${params.order.orderNumber}`; } return emailMessageText; }); } function createEmailMessageAbout(params) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d, _e; const abouyIdentifierByDB = (_a = params.emailMessage) === null || _a === void 0 ? void 0 : _a.about.identifier; const abouyNameByDB = (_b = params.emailMessage) === null || _b === void 0 ? void 0 : _b.about.name; let about; if (typeof ((_c = params.email) === null || _c === void 0 ? void 0 : _c.about) === 'string') { // aboutをStringで指定された場合 // about = params.email.about; about = { typeOf: 'Thing', identifier: params.aboutIdentifier, name: params.email.about }; } else if (typeof ((_e = (_d = params.email) === null || _d === void 0 ? void 0 : _d.about) === null || _e === void 0 ? void 0 : _e.name) === 'string') { // aboutをObjectで指定された場合 about = { typeOf: 'Thing', identifier: params.email.about.identifier, name: params.email.about.name }; } else if (typeof abouyIdentifierByDB === 'string' && typeof abouyNameByDB === 'string') { // デフォルトEメールメッセージを適用する const aboutName = yield new Promise((resolve, reject) => { pug.render(abouyNameByDB, { order: params.order }, (err, message) => { if (err instanceof Error) { reject(new factory.errors.Argument('emailMessage.about.name', err.message)); return; } resolve(message); }); }); about = { typeOf: 'Thing', identifier: abouyIdentifierByDB, name: aboutName }; } else { // aboutの指定がない場合 about = { typeOf: 'Thing', identifier: params.aboutIdentifier, name: params.defaultName }; } return about; }); } function createEmailMessageSender(params, // settings: Settings setting) { var _a, _b; if (typeof setting.defaultSenderEmail !== 'string') { throw new factory.errors.NotFound('setting.defaultSenderEmail'); } return { typeOf: params.order.seller.typeOf, name: (typeof ((_b = (_a = params.email) === null || _a === void 0 ? void 0 : _a.sender) === null || _b === void 0 ? void 0 : _b.name) === 'string') ? params.email.sender.name : (typeof params.order.seller.name === 'string') ? params.order.seller.name : String(params.order.seller.id), // email: settings.defaultSenderEmail email: setting.defaultSenderEmail }; } /** * 注文配送メッセージを作成する */ function createSendOrderMessage(params, // settings: Settings setting) { return __awaiter(this, void 0, void 0, function* () { var _a; const emailMessageText = yield createEmailMessageText({ order: params.order, email: params.email, emailMessage: params.emailMessage }); const about = yield createEmailMessageAbout({ order: params.order, email: params.email, emailMessage: params.emailMessage, aboutIdentifier: factory.creativeWork.message.email.AboutIdentifier.OnOrderSent, defaultName: 'Order Delivered' }); const defaultToRecipientEmail = params.order.customer.email; if (defaultToRecipientEmail === undefined) { throw new factory.errors.Argument('order', 'order.customer.email undefined'); } const defaultRecipientName = `${params.order.customer.familyName} ${params.order.customer.givenName}`; const sender = createEmailMessageSender(params, setting); const toRecipientCustomization = (_a = params.email) === null || _a === void 0 ? void 0 : _a.toRecipient; const toRecipient = (Array.isArray(toRecipientCustomization)) ? toRecipientCustomization.map((customizedRecipient) => { return { typeOf: params.order.customer.typeOf, name: (typeof customizedRecipient.name === 'string') ? customizedRecipient.name : defaultRecipientName, email: (typeof customizedRecipient.email === 'string') ? customizedRecipient.email : defaultToRecipientEmail }; }) : [{ typeOf: params.order.customer.typeOf, name: (typeof (toRecipientCustomization === null || toRecipientCustomization === void 0 ? void 0 : toRecipientCustomization.name) === 'string') ? toRecipientCustomization.name : defaultRecipientName, email: (typeof (toRecipientCustomization === null || toRecipientCustomization === void 0 ? void 0 : toRecipientCustomization.email) === 'string') ? toRecipientCustomization.email : defaultToRecipientEmail }]; return { typeOf: factory.creativeWorkType.EmailMessage, identifier: `${about.identifier}:${params.order.orderNumber}:${params.index}`, name: `${about.identifier}:${params.order.orderNumber}:${params.index}`, sender: sender, toRecipient: toRecipient, about: about, text: emailMessageText }; }); } /** * 注文返品メッセージを作成する */ function createReturnOrderMessage(params, // settings: Settings setting) { return __awaiter(this, void 0, void 0, function* () { var _a; const emailMessageText = yield createEmailMessageText({ order: params.order, email: params.email, emailMessage: params.emailMessage }); const about = yield createEmailMessageAbout({ order: params.order, email: params.email, emailMessage: params.emailMessage, aboutIdentifier: factory.creativeWork.message.email.AboutIdentifier.OnOrderReturned, defaultName: 'Order Returned' }); const defaultToRecipientEmail = params.order.customer.email; if (defaultToRecipientEmail === undefined) { throw new factory.errors.Argument('order', 'order.customer.email undefined'); } const defaultRecipientName = `${params.order.customer.familyName} ${params.order.customer.givenName}`; const sender = createEmailMessageSender(params, setting); const toRecipientCustomization = (_a = params.email) === null || _a === void 0 ? void 0 : _a.toRecipient; const toRecipient = (Array.isArray(toRecipientCustomization)) ? toRecipientCustomization.map((customizedRecipient) => { return { typeOf: params.order.customer.typeOf, name: (typeof customizedRecipient.name === 'string') ? customizedRecipient.name : defaultRecipientName, email: (typeof customizedRecipient.email === 'string') ? customizedRecipient.email : defaultToRecipientEmail }; }) : [{ typeOf: params.order.customer.typeOf, name: (typeof (toRecipientCustomization === null || toRecipientCustomization === void 0 ? void 0 : toRecipientCustomization.name) === 'string') ? toRecipientCustomization.name : defaultRecipientName, email: (typeof (toRecipientCustomization === null || toRecipientCustomization === void 0 ? void 0 : toRecipientCustomization.email) === 'string') ? toRecipientCustomization.email : defaultToRecipientEmail }]; return { typeOf: factory.creativeWorkType.EmailMessage, identifier: `${about.identifier}:${params.order.orderNumber}:${params.index}`, name: `${about.identifier}:${params.order.orderNumber}:${params.index}`, sender: sender, toRecipient: toRecipient, about: about, text: emailMessageText }; }); } /** * 返金メッセージを作成する */ function createRefundMessage(params, // settings: Settings setting) { return __awaiter(this, void 0, void 0, function* () { var _a; const emailMessageText = yield createEmailMessageText({ order: params.order, email: params.email }); const about = yield createEmailMessageAbout({ order: params.order, email: params.email, aboutIdentifier: factory.creativeWork.message.email.AboutIdentifier.OnOrderRefunded, defaultName: 'Refunded' }); const defaultToRecipientEmail = params.order.customer.email; if (defaultToRecipientEmail === undefined) { throw new factory.errors.Argument('order', 'order.customer.email undefined'); } const defaultRecipientName = `${params.order.customer.familyName} ${params.order.customer.givenName}`; const sender = createEmailMessageSender(params, setting); const toRecipientCustomization = (_a = params.email) === null || _a === void 0 ? void 0 : _a.toRecipient; const toRecipient = (Array.isArray(toRecipientCustomization)) ? toRecipientCustomization.map((customizedRecipient) => { return { typeOf: params.order.customer.typeOf, name: (typeof customizedRecipient.name === 'string') ? customizedRecipient.name : defaultRecipientName, email: (typeof customizedRecipient.email === 'string') ? customizedRecipient.email : defaultToRecipientEmail }; }) : [{ typeOf: params.order.customer.typeOf, name: (typeof (toRecipientCustomization === null || toRecipientCustomization === void 0 ? void 0 : toRecipientCustomization.name) === 'string') ? toRecipientCustomization.name : defaultRecipientName, email: (typeof (toRecipientCustomization === null || toRecipientCustomization === void 0 ? void 0 : toRecipientCustomization.email) === 'string') ? toRecipientCustomization.email : defaultToRecipientEmail }]; return { typeOf: factory.creativeWorkType.EmailMessage, identifier: `${about.identifier}:${params.order.orderNumber}:${params.paymentMethodId}`, name: `${about.identifier}:${params.order.orderNumber}:${params.paymentMethodId}`, sender: sender, toRecipient: toRecipient, about: about, text: emailMessageText }; }); }