UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

151 lines (150 loc) 9.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createPayOrderAction = createPayOrderAction; const factory = require("../../factory"); const createPayObjectServiceOutput_1 = require("./factory/createPayObjectServiceOutput"); /** * 注文に対する決済アクションを生成する */ function createPayOrderAction(params) { var _a; const payObject = createPayObject(params); const informPaymentActions = createInformPaymentActions(params); const payPurpose = { typeOf: params.order.typeOf, confirmationNumber: params.order.confirmationNumber, orderNumber: params.order.orderNumber }; // const instrument: factory.action.trade.pay.IInstrument = { // id: params.transaction.id, // transactionNumber: params.transaction.transactionNumber, // typeOf: params.transaction.typeOf // }; const instrument = [ { id: params.transaction.id, transactionNumber: params.transaction.transactionNumber, typeOf: params.transaction.typeOf }, ...(Array.isArray(params.transaction.instrument)) ? params.transaction.instrument : [] ]; const recipient = { id: params.transaction.recipient.id, name: params.transaction.recipient.name, typeOf: params.transaction.recipient.typeOf }; return Object.assign({ project: params.transaction.project, typeOf: factory.actionType.PayAction, object: [payObject], agent: params.transaction.project, potentialActions: { informPayment: informPaymentActions, add2report: true }, purpose: payPurpose, recipient, instrument }, (typeof ((_a = params.transaction.location) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { location: params.transaction.location } : undefined); } // tslint:disable-next-line:cyclomatic-complexity max-func-body-length function createPayObject(params) { var _a; const transaction = params.transaction; const paymentMethod = transaction.object.paymentMethod; const paymentMethodType = String(paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.identifier); const additionalProperty = paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.additionalProperty; const paymentMethodId = transaction.object.paymentMethodId; const paymentMethodName = (typeof (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.name) === 'string') ? paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.name : paymentMethodType; // MonetaryAmount対応(2023-08-13~) const paymentMethodAmountValue = (typeof (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.amount) === 'number') ? paymentMethod.amount : paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.amount.value; const paymentServiceOutput = (0, createPayObjectServiceOutput_1.createPayObjectServiceOutput)(params); let payObject; switch (transaction.object.typeOf) { case factory.service.paymentService.PaymentServiceType.FaceToFace: // 対面決済ではとりあえず問答無用にJPY const totalPaymentDue4faceToFace = { typeOf: 'MonetaryAmount', currency: factory.priceCurrency.JPY, value: paymentMethodAmountValue }; payObject = { typeOf: transaction.object.typeOf, id: (typeof transaction.object.id === 'string') ? transaction.object.id : '', paymentMethod: Object.assign({ additionalProperty: (Array.isArray(additionalProperty)) ? additionalProperty : [], name: paymentMethodName, paymentMethodId: paymentMethodId, totalPaymentDue: totalPaymentDue4faceToFace, typeOf: paymentMethodType }, (typeof (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.accountId) === 'string') ? { accountId: paymentMethod.accountId } : undefined) }; break; case factory.service.paymentService.PaymentServiceType.PaymentCard: const totalPaymentDue = (typeof ((_a = paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.totalPaymentDue) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? paymentMethod.totalPaymentDue : { typeOf: 'MonetaryAmount', currency: factory.priceCurrency.JPY, value: paymentMethodAmountValue }; payObject = { typeOf: transaction.object.typeOf, id: (typeof transaction.object.id === 'string') ? transaction.object.id : '', paymentMethod: { accountId: paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.accountId, additionalProperty: (Array.isArray(additionalProperty)) ? additionalProperty : [], name: paymentMethodName, paymentMethodId: paymentMethodId, totalPaymentDue: totalPaymentDue, typeOf: paymentMethodType }, pendingTransaction: transaction.object.pendingTransaction }; break; case factory.service.paymentService.PaymentServiceType.CreditCard: payObject = { typeOf: transaction.object.typeOf, id: (typeof transaction.object.id === 'string') ? transaction.object.id : '', paymentMethod: Object.assign({ additionalProperty: (Array.isArray(additionalProperty)) ? additionalProperty : [], name: paymentMethodName, paymentMethodId: paymentMethodId, totalPaymentDue: { typeOf: 'MonetaryAmount', currency: factory.priceCurrency.JPY, value: paymentMethodAmountValue }, typeOf: paymentMethodType }, (typeof (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.accountId) === 'string') ? { accountId: paymentMethod.accountId } : undefined) // CreditCardIFのカード通貨区分を追加(2023-08-07~) // ...(paymentServiceOutput !== undefined) ? { serviceOutput: paymentServiceOutput } : undefined }; break; case factory.service.paymentService.PaymentServiceType.MovieTicket: payObject = Object.assign({ typeOf: transaction.object.typeOf, id: (typeof transaction.object.id === 'string') ? transaction.object.id : '', paymentMethod: { accountId: paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.accountId, additionalProperty: (Array.isArray(additionalProperty)) ? additionalProperty : [], name: paymentMethodName, paymentMethodId: paymentMethodId, totalPaymentDue: { typeOf: 'MonetaryAmount', currency: factory.unitCode.C62, value: (Array.isArray(paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.movieTickets)) ? paymentMethod.movieTickets.length : 0 }, typeOf: paymentMethodType }, movieTickets: paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.movieTickets }, (Array.isArray(paymentServiceOutput)) ? { serviceOutput: paymentServiceOutput } : undefined); break; default: throw new factory.errors.NotImplemented(`Payment service "${transaction.object.typeOf}" not implemented.`); } return payObject; } function createInformPaymentActions(params) { var _a, _b; const transaction = params.transaction; const informPaymentActions = []; // 取引に指定があれば設定 // const informPayment = transaction.object.onPaymentStatusChanged?.informPayment; const potentialInformActionId = (_b = (_a = transaction.potentialAction) === null || _a === void 0 ? void 0 : _a.find(({ typeOf }) => typeOf === factory.actionType.InformAction)) === null || _b === void 0 ? void 0 : _b.id; if (typeof potentialInformActionId === 'string') { // const recipient: factory.action.trade.pay.IInformPayment['recipient'] = { // typeOf: transaction.agent.typeOf, // name: transaction.agent.name, // id: transaction.agent.id // // url: String(a.recipient?.url) // }; informPaymentActions.push({ // recipient, // 実際にタスクが生成される直前にactionに置き換える // object: {}, purpose: { typeOf: transaction.typeOf, id: transaction.id }, id: potentialInformActionId // add potentialAction(2025-02-05~) }); } return informPaymentActions; }