UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

138 lines (137 loc) 7.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createStartParams = createStartParams; exports.createPotentialActions = createPotentialActions; const factory = require("../../../factory"); /** * 取引開始パラメータ作成 */ function createStartParams(params) { var _a; const { instrument } = params.paramsWithoutDetail; let reserveTransactionAsObject; let eventReservationsAsObject; let reservationNumber; if (typeof ((_a = params.transaction) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') { const reservationFor = params.transaction.object.reservationFor; if (typeof (reservationFor === null || reservationFor === void 0 ? void 0 : reservationFor.typeOf) !== 'string') { throw new factory.errors.NotFound('transaction.object.reservationFor'); } reserveTransactionAsObject = { id: params.transaction.id, transactionNumber: params.transaction.transactionNumber, typeOf: params.transaction.typeOf, object: { reservationFor: { id: String(reservationFor.id), typeOf: reservationFor.typeOf } } }; reservationNumber = params.transaction.transactionNumber; } if (Array.isArray(params.reservations)) { eventReservationsAsObject = params.reservations.map((r) => { return { id: r.id, issuedThrough: r.issuedThrough, reservationFor: { id: r.reservationFor.id, typeOf: r.reservationFor.typeOf }, reservationNumber: r.reservationNumber, typeOf: r.typeOf }; }); reservationNumber = eventReservationsAsObject[0].reservationNumber; } if (typeof reservationNumber !== 'string') { throw new factory.errors.Argument('object', 'reservationNumber must be specified'); } const cancelReservationObject = Object.assign(Object.assign(Object.assign({}, (typeof (reserveTransactionAsObject === null || reserveTransactionAsObject === void 0 ? void 0 : reserveTransactionAsObject.typeOf) === 'string') ? { transaction: reserveTransactionAsObject } : undefined), (Array.isArray(eventReservationsAsObject)) ? { reservations: eventReservationsAsObject } : undefined), { reservationNumber, typeOf: factory.reservationType.ReservationPackage // 拡張(2024-04-18~) }); return { project: { id: params.project.id, typeOf: params.project.typeOf }, transactionNumber: params.transactionNumber, typeOf: factory.assetTransactionType.CancelReservation, agent: params.paramsWithoutDetail.agent, object: cancelReservationObject, expires: params.paramsWithoutDetail.expires, instrument }; } function createPotentialActions(params) { var _a, _b; const transaction = params.transaction; let cancelReservationActionAttributes = []; // 予約番号指定であれば予約番号単位でアクション生成(2022-12-27~) // 予約番号指定の取消取引であれば、予約取引から取消対象予約リストを作成する const reservationNumber = (_a = transaction.object.transaction) === null || _a === void 0 ? void 0 : _a.transactionNumber; const reservationForByReserveTransaction = (_b = transaction.object.transaction) === null || _b === void 0 ? void 0 : _b.object.reservationFor; if (reservationForByReserveTransaction !== undefined && typeof reservationNumber === 'string') { const cancelObject = { reservationFor: { typeOf: reservationForByReserveTransaction.typeOf, id: String(reservationForByReserveTransaction.id) }, reservationNumber, // ReservationConfirmed->ReservationCancelledのみ処理されるように保証する reservationStatus: factory.reservationStatusType.ReservationConfirmed, typeOf: factory.reservationType.ReservationPackage }; cancelReservationActionAttributes = [Object.assign({ project: transaction.project, typeOf: factory.actionType.CancelAction, object: cancelObject, agent: transaction.project, purpose: { typeOf: transaction.typeOf, id: transaction.id } }, (Array.isArray(transaction.instrument)) ? { instrument: transaction.instrument } : undefined // add(2025-02-17~) )]; } else if (Array.isArray(transaction.object.reservations)) { // 予約取消アクション属性作成 cancelReservationActionAttributes = transaction.object.reservations.map((reservation) => { var _a, _b; // 最適化(2022-06-06~) let cancelObject; if (reservation.typeOf === factory.reservationType.BusReservation) { cancelObject = { typeOf: reservation.typeOf, id: reservation.id, issuedThrough: { typeOf: (_a = reservation.issuedThrough) === null || _a === void 0 ? void 0 : _a.typeOf }, reservationFor: { typeOf: reservation.reservationFor.typeOf, id: String(reservation.reservationFor.id) }, reservationNumber: reservation.reservationNumber, // ReservationConfirmed->ReservationCancelledのみ処理されるように保証する reservationStatus: factory.reservationStatusType.ReservationConfirmed }; } else if (reservation.typeOf === factory.reservationType.EventReservation) { cancelObject = { typeOf: reservation.typeOf, id: reservation.id, issuedThrough: { typeOf: (_b = reservation.issuedThrough) === null || _b === void 0 ? void 0 : _b.typeOf }, reservationFor: { typeOf: reservation.reservationFor.typeOf, id: String(reservation.reservationFor.id) }, reservationNumber: reservation.reservationNumber, // ReservationConfirmed->ReservationCancelledのみ処理されるように保証する reservationStatus: factory.reservationStatusType.ReservationConfirmed }; } else { throw new factory.errors.NotImplemented(`reservation.typeOf ${reservation.typeOf} not imeplemented`); } return Object.assign({ project: transaction.project, typeOf: factory.actionType.CancelAction, object: cancelObject, agent: transaction.project, potentialActions: {}, purpose: { typeOf: transaction.typeOf, id: transaction.id } }, (Array.isArray(transaction.instrument)) ? { instrument: transaction.instrument } : undefined // add(2025-02-17~) ); }); } return { cancelReservation: cancelReservationActionAttributes }; }