UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

165 lines (164 loc) 8.74 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.processOrder = processOrder; /** * 注文処理時処理 */ const createDebug = require("debug"); const util = require("util"); const factory = require("../../../../factory"); const factory_1 = require("./factory"); const debug = createDebug('chevre-domain:service:order'); function processOrder(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { const simpleOrder = { typeOf: params.order.typeOf, // seller: { // id: params.order.seller.id, // typeOf: params.order.seller.typeOf, // name: params.order.seller.name // }, // 廃止(2024-03-06~) // customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id }, // 廃止(2024-03-06~) orderNumber: params.order.orderNumber, // price: params.order.price, // priceCurrency: params.order.priceCurrency, orderDate: params.order.orderDate }; if (params.order.itemOfferedTypeOf === factory.actionType.MoneyTransfer) { yield createConfirmMoneyTransferTasksIfNotExist(params.order, simpleOrder)(repos); } else if (params.order.itemOfferedTypeOf === factory.reservationType.BusReservation || params.order.itemOfferedTypeOf === factory.reservationType.EventReservation) { // 冗長なconfirmReserveTransactionタスク作成を回避(2023-08-25~) yield createConfirmReserveTransactionTasksIfNotExist(params.order, simpleOrder, params.options)(repos); } else if (params.order.itemOfferedTypeOf === factory.permit.PermitType.Permit) { yield createConfirmRegisterServiceTasksIfNotExist(params.order, simpleOrder)(repos); } }); } function createConfirmReserveTransactionTasksIfNotExist(order, simpleOrder, options) { return (repos) => __awaiter(this, void 0, void 0, function* () { const { numTryConfirmReserveTransaction } = options; const taskRunsAt = new Date(); const taskRunsAt4coa = new Date(); let confirmObjects; if (order.offeredThroughIdentifier === factory.service.webAPI.Identifier.COA) { confirmObjects = (0, factory_1.createConfirmReservationActionObject4COAByOrder)({ order }); } else { confirmObjects = (0, factory_1.createConfirmReservationActionObject4ChevreByOrder)({ order }); } yield Promise.all(confirmObjects.map((confirmObject) => __awaiter(this, void 0, void 0, function* () { const data = { project: order.project, typeOf: factory.actionType.ConfirmAction, object: confirmObject, agent: order.project, purpose: simpleOrder // instrument廃止(2024-03-13~) }; const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmReserveTransaction, data.purpose.typeOf, data.purpose.orderNumber, data.object.typeOf, data.object.transactionNumber); const confirmReserveTransactionTask = { alternateName: taskIdentifier, identifier: taskIdentifier, project: order.project, name: factory.taskName.ConfirmReserveTransaction, status: factory.taskStatus.Ready, runsAt: (confirmObject.typeOf === factory.assetTransactionType.COAReserveTransaction) ? taskRunsAt4coa : taskRunsAt, remainingNumberOfTries: numTryConfirmReserveTransaction, // COA性能を考慮して多めに numberOfTried: 0, executionResults: [], data }; yield repos.task.createIfNotExistByAlternateName(confirmReserveTransactionTask, { emitImmediately: true }); if (options.force === true) { const existingTask = yield repos.task.findByIdentifier({ identifier: taskIdentifier, name: confirmReserveTransactionTask.name, project: { id: confirmReserveTransactionTask.project.id } }); if (typeof (existingTask === null || existingTask === void 0 ? void 0 : existingTask.id) === 'string') { const retryResult = yield repos.task.retryForciblyIfAborted({ id: existingTask.id, remainingNumberOfTries: numTryConfirmReserveTransaction }); debug('retryResult:', retryResult, 'taskIdentifier:', taskIdentifier); } } }))); }); } function createConfirmMoneyTransferTasksIfNotExist(order, simpleOrder) { return (repos) => __awaiter(this, void 0, void 0, function* () { const taskRunsAt = new Date(); yield Promise.all(order.serialNumbers.map((moneyTransferTransactionNumber) => __awaiter(this, void 0, void 0, function* () { const data = { project: order.project, typeOf: factory.actionType.ConfirmAction, object: { // pendingTransaction: { id: '' }, // 空文字であれば、transactionNumberで処理される transactionNumber: moneyTransferTransactionNumber, typeOf: factory.assetTransactionType.MoneyTransfer }, agent: order.project, purpose: simpleOrder }; const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmMoneyTransfer, data.purpose.typeOf, simpleOrder.orderNumber, data.object.typeOf, data.object.transactionNumber); const confirmMoneyTransferTransactionTask = { alternateName: taskIdentifier, identifier: taskIdentifier, project: order.project, name: factory.taskName.ConfirmMoneyTransfer, status: factory.taskStatus.Ready, runsAt: taskRunsAt, remainingNumberOfTries: 10, numberOfTried: 0, executionResults: [], data }; yield repos.task.createIfNotExistByAlternateName(confirmMoneyTransferTransactionTask, { emitImmediately: true }); }))); }); } function createConfirmRegisterServiceTasksIfNotExist(order, simpleOrder) { return (repos) => __awaiter(this, void 0, void 0, function* () { const taskRunsAt = new Date(); yield Promise.all(order.serialNumbers.map((registerServiceTransactionNumber) => __awaiter(this, void 0, void 0, function* () { const data = { project: order.project, typeOf: factory.actionType.ConfirmAction, object: { endDate: order.orderDate, transactionNumber: registerServiceTransactionNumber, typeOf: factory.assetTransactionType.RegisterService }, agent: order.project, purpose: simpleOrder }; const taskIdentifier = util.format('%s:%s:%s:%s:%s:%s', data.project.id, factory.taskName.ConfirmRegisterService, data.purpose.typeOf, simpleOrder.orderNumber, data.object.typeOf, data.object.transactionNumber); const confirmRegisterServiceTask = { alternateName: taskIdentifier, identifier: taskIdentifier, project: order.project, name: factory.taskName.ConfirmRegisterService, status: factory.taskStatus.Ready, runsAt: taskRunsAt, remainingNumberOfTries: 10, numberOfTried: 0, executionResults: [], data }; yield repos.task.createIfNotExistByAlternateName(confirmRegisterServiceTask, { emitImmediately: true }); }))); }); }