@chevre/domain
Version:
Chevre Domain Library for Node.js
79 lines (78 loc) • 3.89 kB
JavaScript
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 });
});
}
;