import { IAttributes as IBaseAttributes } from '../event'; import { EventType } from '../eventType'; import { IMultilingualString } from '../multilingualString'; import { IAvailableAtOrFrom, ICategory as IOfferCategory, IEligibleQuantity } from '../offer'; import { OfferType } from '../offerType'; import { OrganizationType } from '../organizationType'; import { PlaceType } from '../placeType'; import { IServiceType as IProductServiceType } from '../product'; import { Identifier as WebAPIIdentifier, IService as IWebAPIService } from '../service/webAPI'; import { ISellerMakesOffer } from './sellerMakesOffer'; export { ISellerMakesOffer }; /** * 予約集計 */ export interface IAggregateReservation { typeOf: 'AggregateReservation'; aggregateDate: Date; checkInCount?: number; attendeeCount?: number; reservationCount?: number; useActionCount?: number; } /** * 予約集計つきオファー */ export interface IOfferWithAggregateReservation { typeOf: OfferType.Offer; id: string; identifier: string; aggregateReservation?: Pick & { attendeeCount?: never; checkInCount?: never; }; category?: IOfferCategory; maximumAttendeeCapacity?: number; remainingAttendeeCapacity?: number; } /** * オファー集計(オファーカテゴリーごと) */ export interface IAggregateOffer { typeOf: OfferType.AggregateOffer; aggregateDate: Date; offerCount?: number; offers?: IOfferWithAggregateReservation[]; } /** * 入場ゲートにおけるオファー集計(オファーカテゴリーごと) */ export interface IAggregateOfferOfPlace { typeOf: OfferType.AggregateOffer; offers?: { typeOf: OfferType.Offer; id: string; identifier?: string; category?: IOfferCategory; aggregateReservation?: Pick; }[]; } export type IServiceType = IProductServiceType & { id?: string; }; export type IOfferedThrough = Pick, 'identifier' | 'typeOf'>; export type IOfferAvailableAtOrFrom = Pick; export interface ISeller { typeOf: OrganizationType.Corporation; /** * 販売者ID */ id: string; name?: IMultilingualString; /** * アプリケーションごとのオファー */ makesOffer: ISellerMakesOffer[]; } export { IEligibleQuantity }; /** * イベントのルーム */ export interface ILocation { typeOf: PlaceType.ScreeningRoom; /** * ルームコード */ branchCode: string; /** * ルームの名称を同期 */ name?: IMultilingualString; /** * ルームのアドレスを同期 * COAでは値無し */ address?: IMultilingualString; /** * maximumPhysicalAttendeeCapacityへ移行 * 2025-08-24時点で、まだ実態としては属性が残っている * 2025-08-30: 値をunset */ maximumAttendeeCapacity?: never; } export type IName = IMultilingualString; export interface IOrganizer { id: string; } /** * イベント属性 */ export interface IAttributes extends Pick, 'additionalProperty' | 'project' | 'identifier' | 'description' | 'eventStatus' | 'name' | 'typeOf'> { /** * 予約集計結果としてのキャパシティ */ maximumAttendeeCapacity?: number; /** * イベント固有のキャパシティ * 施設のキャパシティに依存しない場合に使用 */ maximumPhysicalAttendeeCapacity?: number; /** * 残り収容人数 */ remainingAttendeeCapacity?: number; /** * ルーム */ location: ILocation; /** * イベント名称 */ name: IName; /** * 開場日時 * ISO 8601 date format */ doorTime?: Date; /** * 終了日時( * ISO 8601 date format */ endDate: Date; /** * 開始日時 * ISO 8601 date format */ startDate: Date; /** * 販売情報 */ /** * 発券数 */ checkInCount?: number; /** * 参加数 */ attendeeCount?: number; /** * 予約集計 */ aggregateReservation?: IAggregateReservation; organizer: IOrganizer; } export type ISellerMakesOffer4create = Pick & { availableAtOrFrom: Pick; }; export interface ISeller4create { makesOffer: ISellerMakesOffer4create[]; /** * POS以外のアプリケーションの共通設定 */ makesOfferDefault?: Pick; }