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