import { Model } from 'sequelize-typescript';
import { FindOptions, FindAndCountOptions, UpdateOptions } from 'sequelize';
import { ModelCreationAttributes, ModelPayload, BaseModelType, PaginationParams, ResultsWithCountSet } from './type';
export declare abstract class BaseRepository<T extends Model<T>> {
    protected readonly model: BaseModelType<T>;
    maxLimit: number;
    defaultLimit: number;
    defaultOffset: number;
    protected constructor(model: BaseModelType<T>);
    protected resolveLimit(limit?: number): number;
    findAll(options?: FindOptions<T>): Promise<T[]>;
    findAndCountAll(options?: FindAndCountOptions<ModelCreationAttributes<T>>): Promise<ResultsWithCountSet<T>>;
    findPaginated(paginationParams: PaginationParams, options?: FindAndCountOptions<ModelCreationAttributes<T>>): Promise<ResultsWithCountSet<T>>;
    findOneById(id: string): Promise<T>;
    findOne(options?: FindOptions<T>): Promise<T>;
    create(payload: ModelPayload<T>): Promise<T>;
    createMany(payload: ModelPayload<T>[]): Promise<T[]>;
    update(id: string, payload: ModelPayload<T>): Promise<T>;
    updateMany(options: UpdateOptions, payload: ModelPayload<T>): Promise<void>;
    remove(id: string | string[]): Promise<void>;
}
