@chevre/domain
Version:
Chevre Domain Library for Node.js
147 lines (146 loc) • 6.96 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createInformProcessingOrderTasks = createInformProcessingOrderTasks;
exports.createCheckResourceTask = createCheckResourceTask;
exports.createConfirmReservationActionObject4ChevreByOrder = createConfirmReservationActionObject4ChevreByOrder;
exports.createConfirmReservationActionObject4COAByOrder = createConfirmReservationActionObject4COAByOrder;
const util = require("util");
const factory = require("../../../../factory");
const reservedAgentIdentifireNames_1 = require("../../../../factory/reservedAgentIdentifireNames");
const ASTERISK_CHARACTER = '*';
function createInformProcessingOrderTasks(order, setting) {
var _a;
const taskRunsAt = new Date();
const informOrder = (_a = setting === null || setting === void 0 ? void 0 : setting.onOrderStatusChanged) === null || _a === void 0 ? void 0 : _a.informOrder;
const informTasks = [];
const order4inform = creteProcessingOrderAsNotification(order);
const informIdentifier = `${factory.order.OrderType.Order}:${order4inform.orderNumber}:${order4inform.orderStatus}`;
if (Array.isArray(informOrder) && informOrder.length > 0) {
let recipientId = '';
recipientId = order.customer.id;
informOrder.forEach((informOrderParams) => {
var _a, _b;
if (typeof ((_a = informOrderParams.recipient) === null || _a === void 0 ? void 0 : _a.url) === 'string') {
const informActionAttributes = {
about: { orderNumber: order.orderNumber, typeOf: factory.order.OrderType.Order },
object: order4inform,
recipient: {
// url: informOrderParams.recipient.url, // discontinue(2025-02-13~)
id: recipientId,
name: (_b = informOrderParams.recipient) === null || _b === void 0 ? void 0 : _b.name,
typeOf: factory.creativeWorkType.WebApplication
},
target: {
httpMethod: 'POST',
encodingType: factory.encodingFormat.Application.json,
typeOf: 'EntryPoint',
urlTemplate: informOrderParams.recipient.url
},
identifier: informIdentifier // add(2024-10-24~)
};
informTasks.push({
project: order.project,
name: factory.taskName.TriggerWebhook,
status: factory.taskStatus.Ready,
runsAt: taskRunsAt,
remainingNumberOfTries: 10,
numberOfTried: 0,
executionResults: [],
data: informActionAttributes
});
}
});
}
return informTasks;
}
const MASKED_PROFILE = '****';
/**
* 個人情報のマスクされたカスタマーを作成する
*/
function createMaskedCustomer(order) {
return Object.assign(Object.assign({}, order.customer), {
// ↓identifierも隠蔽
identifier: [],
// ↓additionalPropertyも隠蔽
additionalProperty: [], email: MASKED_PROFILE, telephone: MASKED_PROFILE, name: MASKED_PROFILE, familyName: MASKED_PROFILE, givenName: MASKED_PROFILE });
}
function creteProcessingOrderAsNotification(order) {
const { id, project, typeOf, seller, price, priceCurrency, confirmationNumber, orderNumber, numAcceptedOffers, orderDate, orderStatus } = order;
// in case of [id not found](2025-02-23~)
if (typeof id !== 'string' || id === '') {
// tslint:disable-next-line:no-console
console.error('creteProcessingOrderAsNotification: unexpected order found.', JSON.stringify(order));
throw new factory.errors.Internal('order.id must be string');
}
return {
id, // ↓hub側で使用している可能性もあるので念のため
project, typeOf, seller, price, priceCurrency,
confirmationNumber, orderNumber, numAcceptedOffers, orderStatus, orderDate,
acceptedOffers: [], // OrderProcessingでは通知しない(2024-01-24~)
// mask
customer: Object.assign(Object.assign({}, createMaskedCustomer(order)), { additionalProperty: (Array.isArray(order.customer.additionalProperty)) ? order.customer.additionalProperty : [],
// identifierは必要
// 予約語を隠蔽(2022-12-24~)
identifier: (Array.isArray(order.customer.identifier))
? order.customer.identifier.filter((p) => {
return !reservedAgentIdentifireNames_1.RESERVED_AGENT_IDENTIFIER_NAMES.includes(p.name);
})
: [] }),
// paymentMethodsに関してもmask(2022-05-30~)
paymentMethods: order.paymentMethods.map((p) => {
return Object.assign(Object.assign({}, p), (typeof p.accountId === 'string' && p.accountId.length > 0)
? { accountId: ASTERISK_CHARACTER.repeat(p.accountId.length) }
: undefined);
})
};
}
function createConfirmReservationActionObject4ChevreByOrder(params) {
// serialNumberから生成(2024-02-01~)
return params.order.serialNumbers.map((reservationNumber) => {
const purpose = {
confirmationNumber: params.order.confirmationNumber,
orderNumber: params.order.orderNumber,
typeOf: factory.order.OrderType.Order
};
return {
potentialActions: { reserve: { purpose } },
transactionNumber: reservationNumber,
typeOf: factory.assetTransactionType.Reserve
};
});
}
function createConfirmReservationActionObject4COAByOrder(params) {
// serialNumberから生成(2024-02-01~)
return params.order.serialNumbers.map((reservationNumber) => {
// 完全に最適化(2024-01-31~)
return {
optimized: true,
transactionNumber: reservationNumber,
typeOf: factory.assetTransactionType.COAReserveTransaction
};
});
}
function createCheckResourceTask(order) {
const runsAt = new Date();
const data = {
object: {
orderNumber: order.orderNumber,
typeOf: order.typeOf
},
project: order.project,
typeOf: factory.actionType.CheckAction
};
const taskIdentifier = util.format('%s:%s:%s:%s', order.project.id, factory.taskName.CheckResource, order.typeOf, order.orderNumber);
return {
alternateName: taskIdentifier, // add identifier(2025-03-29~)
identifier: taskIdentifier, // add identifier(2025-03-29~)
project: order.project,
name: factory.taskName.CheckResource,
status: factory.taskStatus.Ready,
runsAt,
remainingNumberOfTries: 10,
numberOfTried: 0,
executionResults: [],
data
};
}
;