import type { Connection } from 'mongoose';
import * as factory from '../factory';
type IProjection4searchWithUnwoundAcceptedOffers = {
    [key in keyof factory.order.IOrder]?: 1;
} & {
    _id?: 0 | 1;
};
type IDistinctField = 'acceptedOffers.id' | 'acceptedOffers.itemOffered.reservationNumber' | 'acceptedOffers.itemOffered.reservationFor.id' | 'acceptedOffers.itemOffered.issuedThrough.id' | 'acceptedOffers.itemOffered.typeOf' | 'acceptedOffers.serialNumber' | 'acceptedOffers.offeredThrough.identifier' | 'acceptedOffers.itemOffered.reservationFor.superEvent.location.branchCode' | 'acceptedOffers.itemOffered.object.pendingTransaction.transactionNumber';
type IAcceptedOffer = factory.order.IAcceptedOffer<factory.order.IItemOffered>;
interface ISearchSlicedAcceptedOffersResult {
    acceptedOffers: IAcceptedOffer[];
    numAcceptedOffers: number;
}
/**
 * 注文オファーリポジトリ
 */
export declare class AcceptedOfferRepo {
    private readonly orderModel;
    constructor(connection: Connection);
    /**
     * オファー展開の注文検索
     */
    searchWithUnwoundAcceptedOffers(params: factory.order.ISearchConditions, projection?: IProjection4searchWithUnwoundAcceptedOffers): Promise<factory.order.IOrder[]>;
    aggreateOwnershipInfosByOrder(filter: {
        orderNumber: {
            $eq: string;
        };
    }): Promise<{
        identifier: string;
    }[]>;
    /**
     * 注文オファーを展開して検索する
     */
    searchAcceptedOffersByOrderNumber(filter: {
        limit?: number;
        page?: number;
        $slice?: [number, number];
        orderNumber: {
            $eq: string;
        };
        project: {
            id: {
                $eq: string;
            };
        };
        /**
         * アイテムタイプで絞る場合
         */
        acceptedOffers?: {
            itemOffered?: {
                id?: {
                    $eq?: string;
                };
                typeOf?: {
                    $in?: factory.order.IItemOffered['typeOf'][];
                };
                reservationFor?: {
                    id?: {
                        $in?: string[];
                    };
                };
                reservedTicket?: {
                    ticketedSeat?: {
                        seatNumber?: {
                            $in?: string[];
                        };
                    };
                };
            };
        };
    }, inclusion?: (keyof IAcceptedOffer)[]): Promise<IAcceptedOffer[]>;
    /**
     * 注文オファーをsliceして検索する(2024-01-10~)
     */
    searchSlicedAcceptedOffersByOrderNumber(filter: {
        $slice: [number, number];
        orderNumber: {
            $eq: string;
        };
        project: {
            id: {
                $eq: string;
            };
        };
    }): Promise<ISearchSlicedAcceptedOffersResult>;
    countByOrderNumber(filter: {
        orderNumber: {
            $eq: string;
        };
        project: {
            id: {
                $eq: string;
            };
        };
    }): Promise<{
        numAcceptedOffers: number;
    }>;
    /**
     * 特定のフィールド値リストを検索する
     */
    distinctValues(filter: {
        orderNumber: {
            $in: string[];
        };
    }, field: IDistinctField): Promise<string[]>;
}
export {};
