@chevre/domain
Version:
Chevre Domain Library for Node.js
90 lines (89 loc) • 2.07 kB
TypeScript
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[]>;
}