@chevre/domain
Version:
Chevre Domain Library for Node.js
61 lines (60 loc) • 3.1 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.verifyToken4reservation = verifyToken4reservation;
const factory = require("../../factory");
/**
* 予約使用のためのチケットトークンを検証する
*/
function verifyToken4reservation(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
let orderNumber;
const { ticketToken } = params.ticket;
let payload;
if (typeof ticketToken === 'string' && ticketToken.length > 0) {
const findValidOneByCodeResult = yield repos.authorization.findValidOneByCode({
project: { id: params.project.id },
code: ticketToken
});
payload = findValidOneByCodeResult.object;
}
else {
throw new factory.errors.ArgumentNull('ticket.token or ticket.ticketToken');
}
switch (payload.typeOf) {
case factory.order.OrderType.Order:
orderNumber = payload.orderNumber;
if (typeof orderNumber !== 'string' || orderNumber.length === 0) {
throw new factory.errors.NotFound('payload.orderNumber');
}
// reservationIdを含む注文の存在を確認するだけでよい(2023-01-31~)
const order = yield repos.order.findByOrderNumberAndReservationId({
project: { id: params.project.id },
orderNumber,
reservationId: params.reservationId,
seller: params.seller
});
// ステータス検証
switch (order.orderStatus) {
case factory.orderStatus.OrderProcessing: // OrderProcessingも許可(2024-01-10~)
case factory.orderStatus.OrderInTransit: // OrderInTransitも許可(2024-01-12~)
case factory.orderStatus.OrderDelivered:
break;
default:
throw new factory.errors.Argument('token', `invalid orderStatus '${order.orderStatus}'`);
}
break;
default:
throw new factory.errors.NotImplemented(`Payload type ${payload.typeOf} not implemented`);
}
return Object.assign({}, (typeof orderNumber === 'string') ? { orderNumber } : undefined);
});
}
;