@chevre/domain
Version:
Chevre Domain Library for Node.js
104 lines (103 loc) • 3.14 kB
TypeScript
import type { Connection, FilterQuery } from 'mongoose';
import { IReservationPackage, ISubReservation } from './mongoose/schemas/pendingReservation';
import { AbstractStockHolderRepo, IGetHolderResult, ILockKey, IOffer, IUnlockKey } from './stockHolderAbstract';
interface ISearchConditions {
limit?: number;
page?: number;
project?: {
id?: {
$eq?: string;
};
};
provider?: {
id?: {
$eq?: string;
};
};
reservationFor?: {
id?: {
$eq?: string;
};
};
reservationNumber?: {
$eq?: string;
};
subReservation?: {
identifier?: {
$eq?: string;
};
};
}
type IProjectFieldResult = Pick<IReservationPackage, 'bookingTime' | 'numSeats' | 'dateCreated' | 'dateModified' | 'expires' | 'reservationFor' | 'reservationNumber' | 'typeOf'>;
type IProjectSubReservationResult = Pick<ISubReservation, 'identifier'> & {
index: number;
};
/**
* 保留予約リポジトリ
*/
export declare class PendingReservationRepo implements AbstractStockHolderRepo {
private readonly pendingReservationModel;
constructor(connection: Connection);
static CREATE_FILTER_QUERY(params: ISearchConditions): FilterQuery<IReservationPackage>[];
private static offer2identifier;
private static lockKey2reservationPackage;
lockIfNotLimitExceeded(lockKey: ILockKey, maximumReservationCount: number): Promise<void>;
lock(lockKey: ILockKey): Promise<void>;
unlock(params: IUnlockKey): Promise<void>;
/**
* 現時点での保留予約数を集計する
*/
countUnavailableOffers(params: {
project: {
id: string;
};
event: {
id: string;
startDate: Date;
hasTicketedSeat: boolean;
};
}): Promise<number>;
getHolder(params: Omit<IUnlockKey, 'holder'>): Promise<string | null | undefined>;
searchHolders(params: {
project: {
id: string;
};
eventId: string;
startDate: Date;
hasTicketedSeat: boolean;
offers: IOffer[];
}): Promise<IGetHolderResult[]>;
docExists(params: {
eventId: string;
}): Promise<boolean>;
deleteExpiredMany(params: {
expires: {
$lte: Date;
};
}): Promise<import("mongodb").DeleteResult>;
projectFields(params: ISearchConditions): Promise<IProjectFieldResult[]>;
projectSubReservationByReservationNumber(params: {
project: {
id: {
$eq: string;
};
};
reservationNumber: {
$eq: string;
};
}): Promise<IProjectSubReservationResult[]>;
/**
* expiresを最新の情報に同期する
*/
syncEvent2expires(params: {
expires: Date;
reservationFor: {
id: string;
};
}): Promise<import("mongoose").UpdateWriteOpResult>;
private aggregateNumSeats;
private createReservationPackageIfPossible;
private deleteReservationPackage;
private deleteReservationIfExists;
}
export {};