import { ActionType } from '../actionType'; import { IIssuedThrough, IPrice } from '../assetTransaction/reserve'; import { IProvider, ITicket, IUnderName } from '../reservation'; import { IReservation as IEventReservation, IReservationForLegacy } from '../reservation/event'; import { ReservationStatusType } from '../reservationStatusType'; import { ReservationType } from '../reservationType'; import { ISubReservationReservedTicket } from '../assetTransaction/reserve'; type IProject = IEventReservation['project']; export type IMaskedUnderName = Pick; export type ISubReservation4inform = Pick & { price?: IPrice; reservedTicket: ISubReservationReservedTicket; }; /** * 確定予約通知 */ export interface IReservationPackage4informConfirmed { bookingTime: Date; issuedThrough: IIssuedThrough; project: IProject; provider: IProvider; reservationFor: IReservationForLegacy; reservationNumber: string; reservationStatus: ReservationStatusType.ReservationConfirmed; subReservation: ISubReservation4inform[]; underName?: IMaskedUnderName; typeOf: ReservationType.ReservationPackage; } /** * 予約取消通知 */ export interface IReservation4informCanceled { typeOf: ReservationType.EventReservation; project: IProject; id: string; reservationStatus: ReservationStatusType.ReservationCancelled; modifiedTime?: Date; } /** * 予約発券通知 * IDあるいは予約番号で発券 */ export interface IReservation4informCheckedIn { typeOf: ReservationType.EventReservation; project: IProject; id: string; checkedIn: boolean; modifiedTime?: Date; /** * 発券通知がarrayの場合、ひとつめのみreservedTicket.ticketTokenが含まれる(2024-10-30~) */ reservedTicket?: Pick; reservationNumber?: never; reservationStatus?: never; attended?: never; } /** * ReservationPackageとしての予約発券通知 * (2024-11-03~) */ export interface IReservationPackage4informCheckedIn { typeOf: ReservationType.ReservationPackage; project: IProject; reservationNumber: string; checkedIn: boolean; modifiedTime?: Date; /** * 発券通知がarrayの場合、ひとつめのみreservedTicket.ticketTokenが含まれる(2024-10-30~) */ reservedTicket?: Pick; subReservation: Pick[]; id?: never; reservationStatus?: never; } interface IUsedReservation { typeOf: ReservationType.EventReservation; id: string; /** * 初使用時のみ通知される */ modifiedTime?: Date; reservedTicket?: { /** * 初使用時のみ通知される */ dateUsed?: Date; }; } /** * 予約使用アクション通知 */ export interface IUseAction { object: Pick; typeOf: ActionType.UseAction; project: IProject; id: string; location?: { /** * 入場ゲートコード */ identifier: string; }; } /** * 予約作成通知 */ export interface IReservationPackage4informPending { project: IProject; reservationFor: { id: string; }; reservationNumber: string; reservationStatus: ReservationStatusType.ReservationPending; typeOf: ReservationType.ReservationPackage; } /** * 保留予約取消通知 */ export interface IReservationPackage4informPendingCanceled { project: IProject; reservationFor: { id: string; }; reservationNumber: string; reservationStatus: ReservationStatusType.ReservationCancelled; typeOf: ReservationType.ReservationPackage; } export type IReservation4inform = IReservationPackage4informConfirmed | IReservation4informCanceled[] | IReservation4informCheckedIn[] | IReservationPackage4informCheckedIn[] | IUseAction | IReservationPackage4informPending | IReservationPackage4informPendingCanceled; export {};