UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

61 lines (60 loc) 3.1 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.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); }); }