UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

147 lines (146 loc) 6.96 kB
"use strict"; 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 }; }