UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

79 lines (78 loc) 3.89 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.cancelPendingReservation = cancelPendingReservation; const http_status_1 = require("http-status"); const factory = require("../../factory"); const factory_1 = require("./factory"); function createCancelPendingReservationAction(params) { const { object, instrument, project } = params; return { project: { id: project.id, typeOf: factory.organizationType.Project }, typeOf: factory.actionType.CancelAction, agent: { id: project.id, typeOf: factory.organizationType.Project }, object, instrument }; } function cancelPendingReservation(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { const actionAttributes = createCancelPendingReservationAction(params); const { theaterCode, dateJouei, titleCode, titleBranchNum, timeBegin, tmpReserveNum } = actionAttributes.object; const delTmpReserveArgs = { theaterCode, dateJouei, titleCode, titleBranchNum, timeBegin, tmpReserveNum }; let recipe = (0, factory_1.processCancelPendingCOAReserveResult2recipe)({ processCancelPendingCOAReserveResult: { delTmpReserveArgs }, project: { id: params.project.id } }); const action = yield repos.action.start(actionAttributes, { recipe }); try { try { yield repos.reserveService.delTmpReserve(delTmpReserveArgs); } catch (error) { let deleted = false; // COAサービスエラーの場合ハンドリング // tslint:disable-next-line:no-single-line-block-comment /* istanbul ignore if */ if (error.name === 'COAServiceError') { if (typeof error.code === 'number' && error.code < http_status_1.INTERNAL_SERVER_ERROR) { // すでに取消済の場合こうなるので、okとする if (error.message === '座席取消失敗') { recipe = (0, factory_1.processCancelPendingCOAReserveResult2recipe)({ processCancelPendingCOAReserveResult: { delTmpReserveArgs, delTmpReserveResult: Object.assign(Object.assign({}, error), { message: error.message }) }, project: { id: params.project.id } }); deleted = true; } } } if (!deleted) { throw error; } } } catch (error) { try { yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error }); } catch (__) { // 失敗したら仕方ない } throw error; } const actionResult = {}; yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: actionResult, recipe }); }); }