import { PrismaService } from '../prisma/prisma.service';
import { PaginationResult, PaginationConfig } from './pagination.interface';
import { BasicSearchOptions, AdvancedSearchOptions, SearchConfig, RelationConfig } from './search.interface';
export declare abstract class BaseService<T, CreateDto, UpdateDto> {
    protected readonly prisma: PrismaService;
    protected abstract readonly modelName: string;
    protected paginationConfig: PaginationConfig;
    protected searchConfig: SearchConfig;
    protected relationConfig: RelationConfig;
    constructor(prisma: PrismaService);
    protected validateLimit(limit: number): number;
    protected validatePage(page: number): number;
    protected validateSearchFields(searchFields: string[]): string[];
    protected buildSearchConditions(options: BasicSearchOptions): any;
    protected buildOrderConditions(orderBy?: Record<string, 'asc' | 'desc'>): any;
    findAll(page?: number, limit?: number, options?: BasicSearchOptions): Promise<PaginationResult<T>>;
    findAllSimple(page?: number, limit?: number, options?: BasicSearchOptions): Promise<T[]>;
    protected convertId(id: string | number): string | number;
    findOne(id: string | number): Promise<T>;
    create(data: CreateDto): Promise<T>;
    update(id: string | number, data: UpdateDto): Promise<T>;
    remove(id: string | number): Promise<T>;
    protected processRelations(options: AdvancedSearchOptions): Record<string, boolean | any>;
    protected buildAdvancedQueryOptions(options: AdvancedSearchOptions): any;
    findAllAdvanced(page?: number, limit?: number, options?: AdvancedSearchOptions): Promise<PaginationResult<T>>;
    findAllAdvancedSimple(page?: number, limit?: number, options?: AdvancedSearchOptions): Promise<T[]>;
}
