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