import { Logger } from '@btc-vision/logger';
import { AnyBulkWriteOperation, ClientSession, Collection, Db, Filter, OperationOptions, Sort } from 'mongodb';
import { IBaseDocument } from '../documents/interfaces/IBaseDocument.js';
import { PagingQueryInfo, PagingQueryResult } from './PagingQuery.js';
export declare abstract class BaseRepository<TDocument extends IBaseDocument> extends Logger {
    protected _db: Db;
    protected constructor(db: Db);
    delete(criteria: Partial<Filter<TDocument>>, currentSession?: ClientSession): Promise<number>;
    getAll(criteria?: Partial<Filter<TDocument>>, currentSession?: ClientSession, sort?: Sort): Promise<TDocument[]>;
    getCount(criteria?: Partial<Filter<TDocument>>, currentSession?: ClientSession): Promise<number>;
    queryOne(criteria: Partial<Filter<TDocument>>, currentSession?: ClientSession, sort?: Sort): Promise<TDocument | null>;
    queryMany(criteria: Partial<Filter<TDocument>>, currentSession?: ClientSession, sort?: Sort): Promise<TDocument[]>;
    queryManyAndSortPaged(criteria: Partial<Filter<TDocument>>, sort: Sort, pagingQueryInfo: PagingQueryInfo, currentSession?: ClientSession): Promise<PagingQueryResult<TDocument>>;
    queryManyAndSort(criteria: Partial<Filter<TDocument>>, sort: Sort, currentSession?: ClientSession): Promise<TDocument[]>;
    save(criteria: Partial<Filter<TDocument>>, document: TDocument, currentSession?: ClientSession): Promise<void>;
    updatePartial(criteria: Partial<Filter<TDocument>>, document: Partial<TDocument>, currentSession?: ClientSession): Promise<void>;
    bulkWrite(operations: AnyBulkWriteOperation<TDocument>[], currentSession?: ClientSession): Promise<void>;
    updatePartialWithFilter(criteria: Partial<Filter<TDocument>>, document: Partial<Filter<TDocument>>, currentSession?: ClientSession): Promise<void>;
    protected abstract getCollection(): Collection<TDocument>;
    protected getOptions(currentSession?: ClientSession): OperationOptions;
}
