UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

107 lines (106 loc) 6.64 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.authorize = authorize; const errorHandler_1 = require("../../../errorHandler"); const factory = require("../../../factory"); const payMovieTicket_1 = require("./payMovieTicket"); const validation_1 = require("./validation"); /** * 決済カード承認 * オーソリサービスが存在するわけではないので、実質着券する */ // tslint:disable-next-line:max-func-body-length function authorize(params, transaction, paymentServiceId, options) { // tslint:disable-next-line:max-func-body-length return (repos, settings) => __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d; let accountId; let accountsReceivablesByServiceType = []; try { // MovieTicket決済の場合、認証 const validateMovieTicketResult = yield (0, validation_1.validateMovieTicket)(params, paymentServiceId, options.checkedAction, options.purpose)(repos, settings); accountsReceivablesByServiceType = validateMovieTicketResult.accountsReceivablesByServiceType; 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; accountId = (Array.isArray(paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.movieTickets)) ? (_a = paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.movieTickets[0]) === null || _a === void 0 ? void 0 : _a.identifier : undefined; if (typeof accountId !== 'string' || accountId.length === 0) { throw new factory.errors.ArgumentNull('object.paymentMethod.movieTickets.identifier'); } const payObject = { typeOf: factory.service.paymentService.PaymentServiceType.MovieTicket, id: paymentServiceId, paymentMethod: Object.assign({ 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 }, (typeof accountId === 'string') ? { accountId } : undefined), movieTickets: paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.movieTickets }; // const instrument: factory.action.trade.pay.IInstrument = { // id: transaction.id, // transactionNumber: transaction.transactionNumber, // typeOf: transaction.typeOf // }; const instrument = [ { id: transaction.id, transactionNumber: transaction.transactionNumber, typeOf: transaction.typeOf }, ...(Array.isArray(transaction.instrument)) ? transaction.instrument : [] ]; const recipient = { id: transaction.recipient.id, name: transaction.recipient.name, typeOf: transaction.recipient.typeOf }; const confirmationNumber = (_b = params.purpose) === null || _b === void 0 ? void 0 : _b.confirmationNumber; const orderNumber = (_c = params.purpose) === null || _c === void 0 ? void 0 : _c.orderNumber; if (typeof confirmationNumber !== 'string' || confirmationNumber === '') { throw new factory.errors.ArgumentNull('purpose.confirmationNumber'); } if (typeof orderNumber !== 'string' || orderNumber === '') { throw new factory.errors.ArgumentNull('purpose.orderNumber'); } const purpose = { confirmationNumber, orderNumber, // required(2025-02-14~) typeOf: factory.order.OrderType.Order }; const payActionAttributes = Object.assign({ project: transaction.project, typeOf: factory.actionType.PayAction, object: [payObject], agent: transaction.project, recipient, instrument, purpose }, (typeof ((_d = options.executor) === null || _d === void 0 ? void 0 : _d.id) === 'string') ? { sameAs: { id: options.executor.id, typeOf: 'Task' } } // link sameAs(2024-06-04~) : undefined); // callOnPayActionCompleted: false(2025-02-10~) // 着券させざるをえないが、informPaymentはしない(注文がまだ存在しないため) yield (0, payMovieTicket_1.payMovieTicket)(payActionAttributes, { callOnPayActionCompleted: false })(repos, settings); } catch (error) { // アクション保管用のエラーと両方throw(2024-05-22~) if (Array.isArray(error)) { throw error; } else { throw [(0, errorHandler_1.handleMvtkReserveError)(error), error]; } // throw handleMvtkReserveError(error); } return { accountId, accountsReceivablesByServiceType }; }); }