UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

194 lines (193 loc) 9.85 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.acceptOffer = acceptOffer; exports.reAcceptOffer = reAcceptOffer; const errorHandler_1 = require("../../../errorHandler"); const factory = require("../../../factory"); const publishOrderNumberIfNotExist_1 = require("../../transaction/placeOrder/publishOrderNumberIfNotExist"); const authorize_1 = require("./acceptOffer/authorize"); const factory_1 = require("./acceptOffer/factory"); function findCOAInfo(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { const searchConditions = { project: { id: { $eq: params.project.id } }, limit: 1, page: 1, typeOf: factory.eventType.ScreeningEvent, id: { $eq: params.id } }; const event = (yield repos.event.projectEventFields(searchConditions, ['coaInfo'])).shift(); if (event === undefined) { throw new factory.errors.NotFound(factory.eventType.ScreeningEvent); } if (event.coaInfo === undefined) { throw new factory.errors.NotFound('coaInfo'); } const { theaterCode, dateJouei, titleCode, titleBranchNum, timeBegin, timeEnd, screenCode } = event.coaInfo; return { theaterCode, dateJouei, titleCode, titleBranchNum, timeBegin, timeEnd, screenCode }; }); } /** * COA興行オファー採用 */ function acceptOffer(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { if (typeof params.sameAs.id !== 'string' || params.sameAs.id === '') { throw new factory.errors.ArgumentNull('sameAs.id'); } const transaction = yield repos.transaction.projectFieldsInProgressById({ typeOf: factory.transactionType.PlaceOrder, id: params.purpose.id }, ['project', 'agent', 'typeOf']); // publishOrderNumber(2025-03-11~) yield (0, publishOrderNumberIfNotExist_1.publishOrderNumberIfNotExist)({ project: { id: transaction.project.id }, id: transaction.id, object: { orderDate: new Date() } })(repos); const coaInfo = yield findCOAInfo({ id: params.object.event.id, project: { id: transaction.project.id } })(repos); const updTmpReserveSeatArgs = (0, factory_1.createUpdTmpReserveSeatArgs)({ object: params.object, coaInfo }); let updTmpReserveSeatResult; let recipe = (0, factory_1.processUpdTmpReserveSeatResult2recipe)({ processUpdTmpReserveSeatResult: { updTmpReserveSeatArgs }, project: { id: transaction.project.id } }); let acceptedOffer; const actionAttributes = { project: transaction.project, typeOf: factory.actionType.AcceptAction, object: params.object, // agent: { id: transaction.agent.id, typeOf: transaction.agent.typeOf }, agent: { id: params.agent.id, typeOf: params.agent.typeOf }, purpose: { id: transaction.id, typeOf: transaction.typeOf }, sameAs: { id: params.sameAs.id, typeOf: 'Task' }, potentialActions: params.potentialActions, instrument: { typeOf: factory.assetTransactionType.COAReserveTransaction // requestBody: updTmpReserveSeatArgs // discontinue(2024-06-11~) } }; const action = yield repos.action.start(actionAttributes, { recipe }); // add recipe(2024-06-11~) try { const acceptedOffersWithoutDetails = yield (0, authorize_1.createAcceptedOffersWithoutDetails)({ object: params.object, coaInfo })({ reserveService: repos.reserveService }); acceptedOffer = yield (0, authorize_1.validateOffers)(coaInfo, acceptedOffersWithoutDetails, { identifier: params.object.appliesToSurfrock.identifier, serviceOutput: { typeOf: params.object.appliesToSurfrock.serviceOutput.typeOf } }, // params.object.flgMember (params.isMember) ? factory.action.accept.coaOffer.FlgMember.Member : factory.action.accept.coaOffer.FlgMember.NonMember)({ reserveService: repos.reserveService, masterService: repos.masterService }); try { updTmpReserveSeatResult = yield repos.reserveService.updTmpReserveSeat(updTmpReserveSeatArgs); recipe = (0, factory_1.processUpdTmpReserveSeatResult2recipe)({ processUpdTmpReserveSeatResult: { updTmpReserveSeatArgs, updTmpReserveSeatResult }, project: { id: transaction.project.id } }); } catch (error) { throw (0, errorHandler_1.handleCOAReserveTemporarilyError)(error); } } catch (error) { try { yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error }); } catch (__) { // no op } throw error; } const result = { object: { acceptedOffer, event: { id: params.object.event.id } }, result: { responseBody: { tmpReserveNum: updTmpReserveSeatResult.tmpReserveNum } }, typeOf: factory.actionType.AuthorizeAction }; yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result, recipe }); // add recipe(2024-06-11~) }); } /** * COA興行オファー採用変更 */ function reAcceptOffer(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { var _a; if (typeof params.sameAs.id !== 'string' || params.sameAs.id === '') { throw new factory.errors.ArgumentNull('sameAs.id'); } if (typeof ((_a = params.potentialActions) === null || _a === void 0 ? void 0 : _a.id) !== 'string' || params.potentialActions.id === '') { throw new factory.errors.ArgumentNull('potentialActions.id'); } const transaction = yield repos.transaction.projectFieldsInProgressById({ typeOf: factory.transactionType.PlaceOrder, id: params.purpose.id }, ['project', 'agent', 'typeOf']); const orderNumber = yield repos.transaction.findInProgressOrderNumberById({ id: transaction.id }); if (typeof orderNumber !== 'string') { // 事前に発行されているはず throw new factory.errors.NotFound('transaction.object.orderNumber'); } const coaInfo = yield findCOAInfo({ id: params.object.event.id, project: { id: transaction.project.id } })(repos); // 承認アクション存在検証 yield repos.action.findById({ id: params.potentialActions.id, typeOf: factory.actionType.AuthorizeAction }, ['id'], []); const actionAttributes = { project: transaction.project, typeOf: factory.actionType.AcceptAction, object: params.object, // agent: { id: transaction.agent.id, typeOf: transaction.agent.typeOf }, agent: { id: params.agent.id, typeOf: params.agent.typeOf }, purpose: { id: transaction.id, typeOf: transaction.typeOf }, sameAs: { id: params.sameAs.id, typeOf: 'Task' }, potentialActions: params.potentialActions, instrument: { typeOf: factory.assetTransactionType.COAReserveTransaction } }; let acceptedOffer; const action = yield repos.action.start(actionAttributes); try { const acceptedOffersWithoutDetails = params.object.acceptedOffer.map((offer) => { return Object.assign(Object.assign({}, offer), { ticketInfo: Object.assign(Object.assign({}, offer.ticketInfo), { spseatAdd1: 0, spseatAdd2: 0, spseatKbn: '' // 承認時に上書きされるので問題なし }) }); }); acceptedOffer = yield (0, authorize_1.validateOffers)(coaInfo, acceptedOffersWithoutDetails, { identifier: params.object.appliesToSurfrock.identifier, serviceOutput: { typeOf: params.object.appliesToSurfrock.serviceOutput.typeOf } }, // params.object.flgMember (params.isMember) ? factory.action.accept.coaOffer.FlgMember.Member : factory.action.accept.coaOffer.FlgMember.NonMember)({ reserveService: repos.reserveService, masterService: repos.masterService }); } catch (error) { try { yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error }); } catch (__) { // no op } throw error; } const result = { id: params.potentialActions.id, object: { acceptedOffer, event: { id: params.object.event.id } }, typeOf: factory.actionType.AuthorizeAction }; yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result }); }); }