import type { Connection, PipelineStage } from 'mongoose';
import * as factory from '../factory';
import { IAggregateReservation } from './mongoose/schemas/aggregateReservation';
type IMatchStage = PipelineStage.Match;
export interface IUpdateAggregateReservationParams {
    $set: {
        aggregateOffer?: factory.event.event.IAggregateOffer;
        aggregateEntranceGate?: factory.event.event.IAggregateEntranceGate;
    };
}
type ISearchWithReservationForIdResult = Pick<IAggregateReservation, 'aggregateOffer'> & {
    /**
     * イベントID
     */
    id: string;
};
export interface ISortOrder {
    'reservationFor.startDate'?: factory.sortType;
}
export interface ISearchConditions {
    limit?: number;
    page?: number;
    sort?: ISortOrder;
    project?: {
        id?: {
            $eq?: string;
        };
    };
    reservationFor?: {
        id?: {
            $eq?: string;
            $in?: string[];
        };
        typeOf?: factory.eventType;
        startFrom?: Date;
        startThrough?: Date;
    };
}
/**
 * 予約集計リポジトリ
 */
export declare class AggregateReservationRepo {
    private readonly aggregateReservationModel;
    constructor(connection: Connection);
    static CREATE_MONGO_CONDITIONS(conditions: ISearchConditions): IMatchStage[];
    /**
     * 予約集計を検索する
     */
    searchWithReservationForId(params: ISearchConditions, inclusion: ('aggregateOffer')[]): Promise<ISearchWithReservationForIdResult[]>;
    /**
     * 予約集計を保管する
     */
    save(filter: Pick<IAggregateReservation, 'project' | 'reservationFor'>, update: IUpdateAggregateReservationParams): Promise<void>;
    unsetUnnecessaryFields(params: {
        filter: any;
        $unset: any;
    }): Promise<import("mongoose").UpdateWriteOpResult>;
}
export {};
