import { BaseEntity, BaseEntityId } from "./entities";
export interface RepositoryAccessOptions<T extends BaseEntity> {
    fields?: (keyof T)[];
}
export interface RepositoryUpdateData<T extends BaseEntity> {
    id: BaseEntityId;
    set?: Partial<T>;
    delete?: (keyof T)[];
}
export interface Repository<T extends BaseEntity> {
    delete(id: BaseEntityId): Promise<boolean>;
    create(data: T): Promise<T>;
    put(data: T): Promise<T>;
    update(data: RepositoryUpdateData<T>): Promise<T>;
    getById(id: BaseEntityId, options?: RepositoryAccessOptions<T>): Promise<T | null>;
    getByIds(ids: BaseEntityId[], options?: RepositoryAccessOptions<T>): Promise<T[]>;
    exists(id: BaseEntityId): Promise<boolean>;
    deleteStorage(): Promise<void>;
    createStorage(): Promise<void>;
}
