import { Repository, FindManyOptions, FindOneOptions, DeepPartial, FindOptionsWhere, SaveOptions } from 'typeorm';
import { ClsService } from 'nestjs-cls';
import { BaseEntity } from '../../database/base.entity';
export declare abstract class TenantAwareRepository<T extends BaseEntity> {
    protected readonly repo: Repository<T>;
    protected readonly cls: ClsService;
    constructor(repo: Repository<T>, cls: ClsService);
    protected getTenantId(): string;
    protected getUserId(): string | null;
    find(options?: FindManyOptions<T>): Promise<T[]>;
    findOne(options: FindOneOptions<T>): Promise<T | null>;
    findById(id: string): Promise<T | null>;
    save(entity: DeepPartial<T>, options?: SaveOptions): Promise<T>;
    saveMany(entities: DeepPartial<T>[], options?: SaveOptions): Promise<T[]>;
    update(id: string, data: Partial<T>): Promise<void>;
    softDelete(id: string): Promise<void>;
    count(options?: FindManyOptions<T>): Promise<number>;
    findPaginated(options: {
        page?: number;
        limit?: number;
        search?: string;
        searchColumns?: string[];
        relations?: string[];
        order?: Record<string, 'ASC' | 'DESC'>;
        where?: FindOptionsWhere<T>;
    }): Promise<{
        items: T[];
        meta: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
}
