import { BaseEntity, BaseEntityId } from "./entities";
import { Repository, RepositoryUpdateData, RepositoryAccessOptions } from "./repository";
import { EntityValidator } from "./entity-validator";
export declare abstract class BaseRepository<T extends BaseEntity> implements Repository<T> {
    protected validator: EntityValidator<T>;
    constructor(validator: EntityValidator<T>);
    create(data: T): Promise<T>;
    put(data: T): Promise<T>;
    update(data: RepositoryUpdateData<T>): Promise<T>;
    protected beforeCreate(data: T): T;
    protected beforeUpdate(data: RepositoryUpdateData<T>): RepositoryUpdateData<T>;
    protected beforePut(data: T): T;
    abstract innerCreate(data: T): Promise<T>;
    abstract innerUpdate(data: RepositoryUpdateData<T>): Promise<T>;
    innerPut(_data: T): Promise<T>;
    abstract delete(id: BaseEntityId): Promise<boolean>;
    abstract getById(id: BaseEntityId, options?: RepositoryAccessOptions<T>): Promise<T | null>;
    abstract getByIds(ids: BaseEntityId[], options?: RepositoryAccessOptions<T>): Promise<T[]>;
    abstract exists(id: BaseEntityId): Promise<boolean>;
    abstract deleteStorage(): Promise<void>;
    abstract createStorage(): Promise<void>;
}
