import { Class, DeepPartial } from '../common'; import { AggregateQuery, AggregateResponse, Filter, FindRelationOptions, Query } from '../interfaces'; import { ProxyQueryService } from './proxy-query.service'; import { QueryService } from './query.service'; export type QueryServiceRelation = { service: QueryService; query: (dto: DTO) => Query; }; export declare class RelationQueryService, U = DeepPartial> extends ProxyQueryService { readonly relations: Record>; constructor(queryService: QueryService, relations: Record>); constructor(relations: Record>); /** * Query for relations for an array of DTOs. This method will return a map with the DTO as the key and the relations as the value. * @param RelationClass - The class of the relation. * @param relationName - The name of the relation to load. * @param dtos - the dtos to find relations for. * @param query - A query to use to filter, page, and sort relations. */ queryRelations(RelationClass: Class, relationName: string, dtos: DTO[], query: Query): Promise>; /** * Query for an array of relations. * @param RelationClass - The class to serialize the relations into. * @param dto - The dto to query relations for. * @param relationName - The name of relation to query for. * @param query - A query to filter, page and sort relations. */ queryRelations(RelationClass: Class, relationName: string, dto: DTO, query: Query): Promise; aggregateRelations(RelationClass: Class, relationName: string, dto: DTO, filter: Filter, aggregate: AggregateQuery): Promise[]>; aggregateRelations(RelationClass: Class, relationName: string, dtos: DTO[], filter: Filter, aggregate: AggregateQuery): Promise[]>>; countRelations(RelationClass: Class, relationName: string, dtos: DTO[], filter: Filter): Promise>; countRelations(RelationClass: Class, relationName: string, dto: DTO, filter: Filter): Promise; /** * Find a relation for an array of DTOs. This will return a Map where the key is the DTO and the value is to relation or undefined if not found. * @param RelationClass - the class of the relation * @param relationName - the name of the relation to load. * @param dtos - the dtos to find the relation for. * @param filter - Additional filter to apply when finding relations */ findRelation(RelationClass: Class, relationName: string, dtos: DTO[], opts?: FindRelationOptions): Promise>; /** * Finds a single relation. * @param RelationClass - The class to serialize the relation into. * @param dto - The dto to find the relation for. * @param relationName - The name of the relation to query for. * @param filter - Additional filter to apply when finding relations */ findRelation(RelationClass: Class, relationName: string, dto: DTO, opts?: FindRelationOptions): Promise; getRelation(name: string): QueryServiceRelation | undefined; }