UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

90 lines (89 loc) 2.07 kB
export interface IOffer { itemOffered?: { serviceOutput?: { /** * 予約ID */ id?: string; }; }; seatSection: string; seatNumber: string; } export interface ILockKey { project: { id: string; }; /** * required(2025-04-30~) * = event.organizer.id */ provider: { id: string; }; eventId: string; startDate: Date; hasTicketedSeat: boolean; offers: IOffer[]; expires: Date; holder: string; /** * required(2025-04-24~) * = reserveTransaction.startDate */ bookingTime: Date; } export interface IUnlockKey { project: { id: string; }; eventId: string; startDate: Date; hasTicketedSeat: boolean; offer: IOffer; holder: string; } export type IGetHolderResult = string | null; /** * 抽象ストックホルダーリポジトリ */ export declare abstract class AbstractStockHolderRepo { /** * 座席をロックする(maxキャパシティチェック有) */ abstract lockIfNotLimitExceeded(lockKey: ILockKey, maximum: number): Promise<void>; /** * 座席をロックする */ abstract lock(lockKey: ILockKey): Promise<void>; /** * 座席ロックを解除する */ abstract unlock(params: IUnlockKey): Promise<void>; /** * 空席でない座席をカウントする */ abstract countUnavailableOffers(params: { project: { id: string; }; event: { id: string; startDate: Date; hasTicketedSeat: boolean; }; }): Promise<number>; /** * 保持者を取得する */ abstract getHolder(params: Omit<IUnlockKey, 'holder'>): Promise<string | null | undefined>; abstract searchHolders(params: { project: { id: string; }; eventId: string; startDate: Date; hasTicketedSeat: boolean; offers: IOffer[]; }): Promise<IGetHolderResult[]>; }