UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

94 lines (93 loc) 5.58 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.checkMovieTicket = checkMovieTicket; const errorHandler_1 = require("../../../errorHandler"); const factory = require("../../../factory"); const factory_1 = require("./factory"); const processPurchaseNumberAuth_1 = require("./processPurchaseNumberAuth"); /** * 決済カード認証 */ function checkMovieTicket(params) { return (repos, settings) => __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d, _e, _f; // 不要な属性がリクエストに含まれているのでmovieTicketsを最適化(2024-03-15~) const movieTicketsBeforeOptimize = (_a = params.object[0]) === null || _a === void 0 ? void 0 : _a.movieTickets; if (!Array.isArray(movieTicketsBeforeOptimize)) { throw new factory.errors.Argument('object.movieTickets must be an array'); } const movieTickets = movieTicketsBeforeOptimize.map(({ accessCode, category, identifier, serviceOutput }) => { return { accessCode, category, identifier, serviceOutput: { reservationFor: serviceOutput.reservationFor } // 最適化(2024-03-15~) }; }); const firstObject = params.object.shift(); // object.length:1なのでこれでok if (firstObject === undefined) { throw new factory.errors.ArgumentNull('object'); } const { id, typeOf, paymentMethod, seller } = firstObject; const optimizedCheckObject = [{ id, typeOf, seller, movieTickets, paymentMethod: { typeOf: paymentMethod.typeOf } // 最適化(2024-03-15~) }]; const paymentMethodType = (_b = optimizedCheckObject[0]) === null || _b === void 0 ? void 0 : _b.paymentMethod.typeOf; // 決済方法区分 const paymentServiceId = (_c = optimizedCheckObject[0]) === null || _c === void 0 ? void 0 : _c.id; const actionAttributes = Object.assign(Object.assign({ project: params.project, typeOf: factory.actionType.CheckAction, agent: params.agent, object: optimizedCheckObject }, (typeof ((_d = params.purpose) === null || _d === void 0 ? void 0 : _d.typeOf) === 'string') ? { purpose: params.purpose } : undefined), (typeof ((_e = params.sameAs) === null || _e === void 0 ? void 0 : _e.id) === 'string') ? { sameAs: { id: params.sameAs.id, typeOf: 'Task' } } // タスク関連付け(2024-05-21~) : undefined); const action = yield repos.action.start(actionAttributes); let processPurchaseNumberAuthResult; let recipe; try { const eventIds = [...new Set(optimizedCheckObject.reduce((a, b) => [ ...a, ...(Array.isArray(b.movieTickets)) ? b.movieTickets.map((ticket) => ticket.serviceOutput.reservationFor.id) : [] ], []))]; if (eventIds.length !== 1) { throw new factory.errors.Argument('movieTickets', 'Number of events must be 1'); } const screeningEvent = yield repos.event.projectEventFieldsById({ id: eventIds[0] }, ['typeOf', 'project', 'coaInfo', 'startDate', 'offers.offeredThrough', 'superEvent.workPerformed.identifier']); const sellerId = (_f = optimizedCheckObject[0]) === null || _f === void 0 ? void 0 : _f.seller.id; const paymentAccepted = yield repos.paymentAccepted.isAcceptedBySeller({ seller: { id: sellerId }, codeValue: paymentMethodType }); if (paymentAccepted !== true) { throw new factory.errors.Argument('transactionId', `payment not accepted [${paymentMethodType}]`); } processPurchaseNumberAuthResult = yield (0, processPurchaseNumberAuth_1.processPurchaseNumberAuth)({ movieTickets, screeningEvent, paymentServiceId, seller: { id: sellerId } })(repos, settings); // add recipe(2024-06-07~) recipe = (0, factory_1.processPurchaseNumberAuthResult2checkRecipe)({ processPurchaseNumberAuthResult, project: { id: params.project.id } }); } catch (error) { // アクション保管用のエラーと両方保管(2024-05-22~) const errors = [(0, errorHandler_1.handleMvtkReserveError)(error), error]; try { yield repos.action.giveUp({ typeOf: actionAttributes.typeOf, id: action.id, error: errors }); } catch (__) { // 失敗したら仕方ない } throw errors[0]; } const result = {}; yield repos.action.completeWithVoid({ typeOf: actionAttributes.typeOf, id: action.id, result, recipe }); return { result: processPurchaseNumberAuthResult }; }); }