import { CrudRepository, type SystemConfig } from '@citrineos/base';
import { type Model, type Sequelize } from 'sequelize-typescript';
import { type ILogObj, Logger } from 'tslog';
import { Attributes, FindAndCountOptions } from 'sequelize';
export declare class SequelizeRepository<T extends Model<any, any>> extends CrudRepository<T> {
    protected s: Sequelize;
    protected namespace: string;
    protected logger: Logger<ILogObj>;
    constructor(config: SystemConfig, namespace: string, logger?: Logger<ILogObj>, sequelizeInstance?: Sequelize);
    readByKey(key: string | number): Promise<T | undefined>;
    readAllByQuery(query: object): Promise<T[]>;
    readAllBySqlString(sqlString: string): Promise<object[]>;
    readNextValue(columnName: string, query?: object, startValue?: number): Promise<number>;
    existsByKey(key: string): Promise<boolean>;
    existByQuery(query: object): Promise<number>;
    findAndCount(options: Omit<FindAndCountOptions<Attributes<T>>, 'group'>): Promise<{
        rows: T[];
        count: number;
    }>;
    protected _create(value: T): Promise<T>;
    protected _bulkCreate(values: T[]): Promise<T[]>;
    protected _createByKey(value: T, key: string): Promise<T>;
    protected _readOrCreateByQuery(query: object): Promise<[T, boolean]>;
    protected _updateByKey(value: Partial<T>, key: string): Promise<T | undefined>;
    protected _updateAllByQuery(value: Partial<T>, query: object): Promise<T[]>;
    protected _deleteByKey(key: string): Promise<T | undefined>;
    protected _deleteAllByQuery(query: object): Promise<T[]>;
}
