import { BaseEntity } from '@backend/domain';
import { DeepPartial, DeleteResult, FindManyOptions, FindOneOptions, FindOptionsWhere, ObjectId, QueryRunner, RemoveOptions, Repository, SaveOptions, SelectQueryBuilder, UpdateResult } from 'typeorm';
import { PickKeysByType } from 'typeorm/common/PickKeysByType';
import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity';
export declare abstract class BaseEntityRepository<T extends BaseEntity<T>> extends Repository<T> {
    readonly _repository: Repository<T>;
    constructor(_repository: Repository<T>);
    find(options?: FindManyOptions<T> | undefined): Promise<T[]>;
    findOne(options: FindOneOptions<T>): Promise<T | null>;
    findOneBy(where: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<T | null>;
    save<K extends DeepPartial<T>>(entities: K[], options: SaveOptions & {
        reload: false;
    }): Promise<T[]>;
    save<K extends DeepPartial<T>>(entities: K[], options?: SaveOptions | undefined): Promise<(T & T)[]>;
    save<K extends DeepPartial<T>>(entity: K, options: SaveOptions & {
        reload: false;
    }): Promise<T>;
    save<K extends DeepPartial<T>>(entity: K, options?: SaveOptions | undefined): Promise<T & T>;
    update(criteria: FindOptionsWhere<T>, partialEntity: QueryDeepPartialEntity<T>): Promise<UpdateResult>;
    delete(criteria: FindOptionsWhere<T>): Promise<DeleteResult>;
    softDelete(criteria: FindOptionsWhere<T>): Promise<UpdateResult>;
    exist(options?: FindManyOptions<T> | undefined): Promise<boolean>;
    count(options?: FindManyOptions<T> | undefined): Promise<number>;
    query<K = unknown>(query: string, parameters?: unknown[] | undefined): Promise<K>;
    maximum(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[] | undefined): Promise<number | null>;
    average(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[] | undefined): Promise<number | null>;
    clear(): Promise<void>;
    countBy(where: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number>;
    create(): T;
    create(entityLikeArray: DeepPartial<T>[]): T[];
    create(entityLike: DeepPartial<T>): T;
    createQueryBuilder(alias?: string | undefined, queryRunner?: QueryRunner | undefined): SelectQueryBuilder<T>;
    decrement(conditions: FindOptionsWhere<T>, propertyPath: string, value: string | number): Promise<UpdateResult>;
    extend<CustomRepository>(custom: CustomRepository & ThisType<this & CustomRepository>): this & CustomRepository;
    findAndCount(options?: FindManyOptions<T> | undefined): Promise<[T[], number]>;
    findAndCountBy(where: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<[T[], number]>;
    findBy(where: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<T[]>;
    findOneByOrFail(where: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<T>;
    findOneOrFail(options: FindOneOptions<T>): Promise<T>;
    increment(conditions: FindOptionsWhere<T>, propertyPath: string, value: string | number): Promise<UpdateResult>;
    merge(mergeIntoEntity: T, ...entityLikes: DeepPartial<T>[]): T;
    minimum(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[] | undefined): Promise<number | null>;
    preload(entityLike: DeepPartial<T>): Promise<T | undefined>;
    recover<K extends DeepPartial<T>>(entities: K[], options: SaveOptions & {
        reload: false;
    }): Promise<T[]>;
    recover<K extends DeepPartial<T>>(entities: K[], options?: SaveOptions | undefined): Promise<(T & T)[]>;
    recover<K extends DeepPartial<T>>(entity: K, options: SaveOptions & {
        reload: false;
    }): Promise<T>;
    recover<K extends DeepPartial<T>>(entity: K, options?: SaveOptions | undefined): Promise<T & T>;
    remove(entities: T[], options?: RemoveOptions | undefined): Promise<T[]>;
    remove(entity: T, options?: RemoveOptions | undefined): Promise<T>;
    restore(criteria: string | number | FindOptionsWhere<T> | Date | ObjectId | string[] | number[] | Date[] | ObjectId[]): Promise<UpdateResult>;
    softRemove<K extends DeepPartial<T>>(entities: K[], options: SaveOptions & {
        reload: false;
    }): Promise<T[]>;
    softRemove<K extends DeepPartial<T>>(entities: K[], options?: SaveOptions | undefined): Promise<(T & T)[]>;
    softRemove<K extends DeepPartial<T>>(entity: K, options: SaveOptions & {
        reload: false;
    }): Promise<T>;
    softRemove<K extends DeepPartial<T>>(entity: K, options?: SaveOptions | undefined): Promise<T & T>;
    sum(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[] | undefined): Promise<number | null>;
    private oneOptionsFilter;
    private manyOptionsFilter;
    private optionsWhereFilter;
}
