Skip to content

Commit

Permalink
feat(core): parallelize queries within relation query service
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan Stanfield authored and doug-martin committed Oct 1, 2020
1 parent 2fc4906 commit b339a2a
Showing 1 changed file with 32 additions and 20 deletions.
52 changes: 32 additions & 20 deletions packages/core/src/services/relation-query.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,14 @@ export class RelationQueryService<DTO, C = DeepPartial<DTO>, U = DeepPartial<DTO
}
const { query: qf, service } = serviceRelation;
if (Array.isArray(dto)) {
return dto.reduce(async (mapPromise, d) => {
const map = await mapPromise;
const relations = await service.query(mergeQuery(query, qf(d)));
return map.set(d, relations);
}, Promise.resolve(new Map<DTO, Relation[]>()));
const map = new Map<DTO, Relation[]>();
await Promise.all(
dto.map(async (d) => {
const relations = await service.query(mergeQuery(query, qf(d)));
map.set(d, relations);
}),
);
return map;
}
return service.query(mergeQuery(query, qf(dto)));
}
Expand Down Expand Up @@ -118,11 +121,14 @@ export class RelationQueryService<DTO, C = DeepPartial<DTO>, U = DeepPartial<DTO
}
const { query: qf, service } = serviceRelation;
if (Array.isArray(dto)) {
return dto.reduce(async (mapPromise, d) => {
const map = await mapPromise;
const relations = await service.aggregate(mergeQuery({ filter }, qf(d)).filter ?? {}, aggregate);
return map.set(d, relations);
}, Promise.resolve(new Map<DTO, AggregateResponse<Relation>>()));
const map = new Map<DTO, AggregateResponse<Relation>>();
await Promise.all(
dto.map(async (d) => {
const relations = await service.aggregate(mergeQuery({ filter }, qf(d)).filter ?? {}, aggregate);
map.set(d, relations);
}),
);
return map;
}
return service.aggregate(mergeQuery({ filter }, qf(dto)).filter ?? {}, aggregate);
}
Expand Down Expand Up @@ -156,11 +162,14 @@ export class RelationQueryService<DTO, C = DeepPartial<DTO>, U = DeepPartial<DTO
}
const { query: qf, service } = serviceRelation;
if (Array.isArray(dto)) {
return dto.reduce(async (mapPromise, d) => {
const map = await mapPromise;
const relations = await service.count(mergeQuery({ filter }, qf(d)).filter || {});
return map.set(d, relations);
}, Promise.resolve(new Map<DTO, number>()));
const map = new Map<DTO, number>();
await Promise.all(
dto.map(async (d) => {
const count = await service.count(mergeQuery({ filter }, qf(d)).filter || {});
map.set(d, count);
}),
);
return map;
}
return service.count(mergeQuery({ filter }, qf(dto)).filter || {});
}
Expand Down Expand Up @@ -208,11 +217,14 @@ export class RelationQueryService<DTO, C = DeepPartial<DTO>, U = DeepPartial<DTO
}
const { query: qf, service } = serviceRelation;
if (Array.isArray(dto)) {
return dto.reduce(async (mapPromise, d) => {
const map = await mapPromise;
const relation = await service.query(mergeQuery(qf(d), { paging: { limit: 1 }, filter: opts?.filter }));
return map.set(d, relation[0]);
}, Promise.resolve(new Map<DTO, Relation | undefined>()));
const map = new Map<DTO, Relation | undefined>();
await Promise.all(
dto.map(async (d) => {
const relation = await service.query(mergeQuery(qf(d), { paging: { limit: 1 }, filter: opts?.filter }));
map.set(d, relation[0]);
}),
);
return map;
}
return (await service.query(mergeQuery(qf(dto), { paging: { limit: 1 }, filter: opts?.filter })))[0];
}
Expand Down

0 comments on commit b339a2a

Please sign in to comment.