@chevre/domain
Version:
Chevre Domain Library for Node.js
303 lines (302 loc) • 14.2 kB
JavaScript
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
};
});
}
;