import 'reflect-metadata';
import { EntityManager } from './EntityManager';
import { Pool } from 'mysql2/promise';
/**
 * Base repository interface similar to Spring Data JPA's CrudRepository
 */
export interface CrudRepository<T, ID> {
    save(entity: T, fieldsToUpdate?: string[]): Promise<T>;
    saveAll(entities: T[]): Promise<T[]>;
    findById(id: ID): Promise<T | null>;
    findAll(): Promise<T[]>;
    existsById(id: ID): Promise<boolean>;
    count(): Promise<number>;
    deleteById(id: ID): Promise<void>;
    delete(entity: T): Promise<void>;
    deleteAll(): Promise<void>;
}
/**
 * Base repository implementation
 */
export declare abstract class BaseRepository<T, ID> implements CrudRepository<T, ID> {
    protected pool: Pool;
    protected entityManager: EntityManager;
    constructor(pool: Pool);
    abstract getEntityClass(): new () => T;
    abstract getId(entity: T): ID;
    save(entity: T, fieldsToUpdate?: string[]): Promise<T>;
    saveAll(entities: T[]): Promise<T[]>;
    findById(id: ID): Promise<T | null>;
    findAll(): Promise<T[]>;
    existsById(id: ID): Promise<boolean>;
    count(): Promise<number>;
    deleteById(id: ID): Promise<void>;
    delete(entity: T): Promise<void>;
    deleteAll(): Promise<void>;
    /**
     * Create a query builder for custom queries
     */
    createQueryBuilder(): import("./EntityManager").QueryBuilder;
}
//# sourceMappingURL=Repository.d.ts.map