UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

238 lines (237 loc) 13.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.creatPublishPaymentUrlParams = creatPublishPaymentUrlParams; exports.creatPayTransactionStartParams = creatPayTransactionStartParams; exports.createMovieTicket = createMovieTicket; exports.createAuthorizeResult = createAuthorizeResult; exports.optimizeAction4inform = optimizeAction4inform; const moment = require("moment"); const util = require("util"); const factory = require("../../../factory"); function creatPublishPaymentUrlParams(params) { var _a, _b, _c, _d; const issuedThroughId = (_a = params.object.issuedThrough) === null || _a === void 0 ? void 0 : _a.id; // const accountId: string | undefined = (typeof params.accountId === 'string') // ? params.accountId // : (typeof params.object.accountId === 'string') ? params.object.accountId : undefined; // const movieTickets: factory.action.trade.pay.IMovieTicket[] | undefined // = (Array.isArray(params.object.movieTickets)) ? params.object.movieTickets.map(createMovieTicket) : undefined; const paymentMethod = Object.assign(Object.assign({ identifier: params.object.paymentMethod, amount: params.object.amount }, (typeof params.object.method === 'string') ? { method: params.object.method } : undefined), (params.object.creditCard !== undefined) ? { creditCard: params.object.creditCard } : undefined // ...(Array.isArray(movieTickets)) ? { movieTickets } : undefined ); const object = { typeOf: params.paymentServiceType, id: issuedThroughId, paymentMethod }; return Object.assign(Object.assign({ project: { id: params.transaction.project.id, typeOf: factory.organizationType.Project }, typeOf: factory.assetTransactionType.Pay, transactionNumber: params.transactionNumber, agent: { typeOf: params.transaction.seller.typeOf, id: params.transaction.seller.id, name: (typeof params.transaction.seller.name === 'string') ? params.transaction.seller.name : String((_b = params.transaction.seller.name) === null || _b === void 0 ? void 0 : _b.ja) }, recipient: { id: params.transaction.seller.id, name: (typeof params.transaction.seller.name === 'string') ? params.transaction.seller.name : String((_c = params.transaction.seller.name) === null || _c === void 0 ? void 0 : _c.ja), typeOf: params.transaction.seller.typeOf }, object }, (typeof ((_d = params.location) === null || _d === void 0 ? void 0 : _d.typeOf) === 'string') ? { location: params.location } : undefined), (typeof params.identifier === 'string') ? { identifier: params.identifier } : undefined); } function creatPayTransactionStartParams(params) { var _a, _b, _c, _d; let expires = moment(params.transaction.expires) .add(1, 'month') .toDate(); // 余裕を持って // 実験的にPaymentDueに対応(2023-08-30~) if (params.paymentServiceType === factory.service.paymentService.PaymentServiceType.FaceToFace) { if (params.object.paymentMethod.length === 0) { expires = moment(params.transaction.expires) .add(1, 'hour') .toDate(); } } const { confirmationNumber, orderNumber } = params.order; const issuedThroughId = (_a = params.object.issuedThrough) === null || _a === void 0 ? void 0 : _a.id; const accountId = (typeof params.accountId === 'string') ? params.accountId : (typeof params.object.accountId === 'string') ? params.object.accountId : undefined; const movieTickets = (Array.isArray(params.object.movieTickets)) ? params.object.movieTickets.map(createMovieTicket) : undefined; const instrument = [ { id: params.action.id, typeOf: params.action.typeOf }, { orderNumber, typeOf: factory.order.OrderType.Order } ]; return Object.assign({ project: { id: params.transaction.project.id, typeOf: factory.organizationType.Project }, typeOf: factory.assetTransactionType.Pay, transactionNumber: params.transactionNumber, agent: { typeOf: params.transaction.seller.typeOf, id: params.transaction.seller.id, name: (typeof params.transaction.seller.name === 'string') ? params.transaction.seller.name : String((_b = params.transaction.seller.name) === null || _b === void 0 ? void 0 : _b.ja) // identifierを廃止(2024-03-05~) // identifier: [ // { name: 'transaction', value: params.transaction.id }, // { // name: 'transactionExpires', // value: moment(params.transaction.expires) // .toISOString() // } // ] }, recipient: { id: params.transaction.seller.id, name: (typeof params.transaction.seller.name === 'string') ? params.transaction.seller.name : String((_c = params.transaction.seller.name) === null || _c === void 0 ? void 0 : _c.ja), typeOf: params.transaction.seller.typeOf }, object: { typeOf: params.paymentServiceType, id: issuedThroughId, paymentMethod: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ identifier: params.object.paymentMethod, amount: params.object.amount, additionalProperty: (Array.isArray(params.object.additionalProperty)) ? params.object.additionalProperty : [] }, (typeof params.object.method === 'string') ? { method: params.object.method } : undefined), (typeof params.object.name === 'string') ? { name: params.object.name } : undefined), (typeof accountId === 'string') ? { accountId } : undefined), (typeof params.object.description === 'string') ? { description: params.object.description } : undefined), (typeof params.object.fromLocation === 'string') ? { fromLocation: params.object.fromLocation } : undefined), (params.object.creditCard !== undefined) ? { creditCard: params.object.creditCard } : undefined), (Array.isArray(movieTickets)) ? { movieTickets } : undefined) }, expires: expires, purpose: { typeOf: factory.order.OrderType.Order, confirmationNumber, orderNumber }, instrument }, (typeof ((_d = params.location) === null || _d === void 0 ? void 0 : _d.typeOf) === 'string') ? { location: params.location } : undefined); } function createMovieTicket(params) { var _a; let ticketIdentifier = util.format('%s:%s:%s', params.serviceOutput.reservationFor.id, params.serviceOutput.reservedTicket.ticketedSeat.seatSection, params.serviceOutput.reservedTicket.ticketedSeat.seatNumber); // 指定があれば採用(2024-04-16~) const ticketIdentifierByRequest = params.serviceOutput.reservedTicket.identifier; if (typeof ticketIdentifierByRequest === 'string' && ticketIdentifierByRequest.length > 0) { ticketIdentifier = ticketIdentifierByRequest; } const serviceOutput = { reservationFor: { typeOf: params.serviceOutput.reservationFor.typeOf, id: params.serviceOutput.reservationFor.id }, reservedTicket: { identifier: ticketIdentifier, // チケット識別子追加(2024-04-15~) ticketedSeat: { typeOf: factory.placeType.Seat, seatNumber: params.serviceOutput.reservedTicket.ticketedSeat.seatNumber, seatRow: params.serviceOutput.reservedTicket.ticketedSeat.seatRow, seatSection: params.serviceOutput.reservedTicket.ticketedSeat.seatSection } } }; return { typeOf: params.typeOf, identifier: params.identifier, accessCode: params.accessCode, category: { codeValue: (typeof ((_a = params.category) === null || _a === void 0 ? void 0 : _a.codeValue) === 'string') ? params.category.codeValue : '' }, serviceType: params.serviceType, serviceOutput }; } function createAuthorizeResult(params) { var _a, _b, _c, _d, _e, _f; const payTransactionObject = params.payTransaction.object; const totalPaymentDue = (_a = payTransactionObject.paymentMethod) === null || _a === void 0 ? void 0 : _a.totalPaymentDue; if (typeof (totalPaymentDue === null || totalPaymentDue === void 0 ? void 0 : totalPaymentDue.typeOf) !== 'string') { throw new factory.errors.Internal('payTransaction.object.paymentMethod.totalPaymentDue undefined'); } const issuedThrough = { typeOf: payTransactionObject.typeOf, id: (typeof payTransactionObject.id === 'string') ? payTransactionObject.id : '' }; // 決済取引から決済カード通貨区分を取り出す const paymentMethodAmountCurrencyByPayTransaction = (typeof ((_b = payTransactionObject.paymentMethod) === null || _b === void 0 ? void 0 : _b.amount) !== 'number') ? (_d = (_c = payTransactionObject.paymentMethod) === null || _c === void 0 ? void 0 : _c.amount) === null || _d === void 0 ? void 0 : _d.currency : undefined; const paymentMethodAsObject = Object.assign({ typeOf: params.object.paymentMethod }, (payTransactionObject.typeOf === factory.service.paymentService.PaymentServiceType.CreditCard && typeof paymentMethodAmountCurrencyByPayTransaction === 'string') ? { amount: { currency: paymentMethodAmountCurrencyByPayTransaction } } : undefined); // FaceToFaceの場合、決済方法区分未指定に対応(2023-08-29~) let paymentStatus = factory.paymentStatusType.PaymentAutomaticallyApplied; if (issuedThrough.typeOf === factory.service.paymentService.PaymentServiceType.FaceToFace) { if (paymentMethodAsObject.typeOf.length === 0) { paymentStatus = factory.paymentStatusType.PaymentDue; } } // Array対応(2023-09-02~) const resultAsInvoice = { accountId: (typeof ((_e = payTransactionObject.paymentMethod) === null || _e === void 0 ? void 0 : _e.accountId) === 'string') ? payTransactionObject.paymentMethod.accountId : '', issuedThrough, // 完全廃止(paymentMethodAsObjectへ完全移行)(2023-08-16~) // paymentMethod: params.object.paymentMethod, paymentMethodAsObject, paymentStatus, paymentMethodId: (typeof payTransactionObject.paymentMethodId === 'string') ? payTransactionObject.paymentMethodId : '', name: (typeof ((_f = payTransactionObject.paymentMethod) === null || _f === void 0 ? void 0 : _f.name) === 'string') ? payTransactionObject.paymentMethod.name : params.object.paymentMethod, totalPaymentDue: totalPaymentDue, additionalProperty: (Array.isArray(params.object.additionalProperty)) ? params.object.additionalProperty : [], typeOf: factory.action.authorize.paymentMethod.any.ResultType.Payment }; // tslint:disable-next-line:no-suspicious-comment // TODO 保留 resultにメンバーシップを追加(2024-08-13~) // let resultAsPermit: factory.action.authorize.paymentMethod.any.IResultAsPermit | undefined; // if (typeof params.permit?.identifier === 'string') { // resultAsPermit = { // typeOf: factory.permit.PermitType.Permit, // identifier: params.permit.identifier, // issuedThrough: { serviceType: params.permit.issuedThrough?.serviceType } // }; // } // Arrayに統一(2023-09-04~) // if (resultAsPermit !== undefined) { // return [resultAsInvoice, resultAsPermit]; // } else { // return [resultAsInvoice]; // } return [resultAsInvoice]; } function payActionObject2invoice(params) { var _a; return Object.assign({ paymentMethod: Object.assign({ id: params.id, typeOf: params.typeOf }, (Array.isArray(params.serviceOutput)) ? { serviceOutput: params.serviceOutput } : undefined), paymentMethodId: params.paymentMethod.paymentMethodId, typeOf: 'Invoice' }, (typeof ((_a = params.paymentMethod.totalPaymentDue) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { totalPaymentDue: params.paymentMethod.totalPaymentDue } : undefined); } function refundActionObject2invoice(params) { var _a; return Object.assign({ paymentMethod: { id: params.id, typeOf: params.typeOf }, paymentMethodId: params.paymentMethod.paymentMethodId, typeOf: 'Invoice' }, (typeof ((_a = params.paymentMethod.totalPaymentDue) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? { totalPaymentDue: params.paymentMethod.totalPaymentDue } : undefined); } /** * 通知対象としてのアクションを最適化 */ function optimizeAction4inform(action) { let optimizedAction; const actionTypeOf = action.typeOf; switch (actionTypeOf) { case factory.actionType.PayAction: optimizedAction = { id: action.id, object: action.object.map(payActionObject2invoice), typeOf: action.typeOf }; break; case factory.actionType.RefundAction: optimizedAction = { id: action.id, object: action.object.map(refundActionObject2invoice), typeOf: action.typeOf }; break; default: throw new factory.errors.NotImplemented(`action type '${actionTypeOf}' not implemented`); } return optimizedAction; }