fix: performant relations
This commit is contained in:
@@ -10,28 +10,22 @@ export class OrderRepository extends Repository<Order> {
|
||||
): Promise<Order[]> {
|
||||
const entities = await this.find(optionsWithoutRelations)
|
||||
const entitiesIds = entities.map(({ id }) => id)
|
||||
|
||||
const groupedRelations = {}
|
||||
for (const rel of relations) {
|
||||
const [topLevel] = rel.split(".")
|
||||
if (groupedRelations[topLevel]) {
|
||||
groupedRelations[topLevel].push(rel)
|
||||
} else {
|
||||
groupedRelations[topLevel] = [rel]
|
||||
}
|
||||
}
|
||||
|
||||
const entitiesIdsWithRelations = await Promise.all(
|
||||
relations.map(relation => {
|
||||
const relationParts = relation.split(".") as string[]
|
||||
|
||||
const partialRelations = relationParts.reduce(
|
||||
(acc: string[], _: string, index: number) => {
|
||||
const toPush = []
|
||||
|
||||
for (let i = 0; i <= index; i++) {
|
||||
toPush.push(relationParts[i])
|
||||
}
|
||||
|
||||
acc.push(toPush.join("."))
|
||||
|
||||
return acc
|
||||
},
|
||||
[] as string[]
|
||||
)
|
||||
|
||||
Object.entries(groupedRelations).map(([_, rels]) => {
|
||||
return this.findByIds(entitiesIds, {
|
||||
select: ["id"],
|
||||
relations: partialRelations,
|
||||
relations: rels as string[],
|
||||
})
|
||||
})
|
||||
).then(flatten)
|
||||
@@ -47,6 +41,9 @@ export class OrderRepository extends Repository<Order> {
|
||||
relations: Array<keyof Order> = [],
|
||||
optionsWithoutRelations: Omit<FindManyOptions<Order>, "relations"> = {}
|
||||
): Promise<Order> {
|
||||
// Limit 1
|
||||
optionsWithoutRelations.take = 1
|
||||
|
||||
const result = await this.findWithRelations(
|
||||
relations,
|
||||
optionsWithoutRelations
|
||||
|
||||
@@ -328,7 +328,9 @@ class OrderService extends BaseService {
|
||||
query.select = select
|
||||
}
|
||||
|
||||
const raw = await orderRepo.findOneWithRelations(query.relations, query)
|
||||
const rels = query.relations
|
||||
delete query.relations
|
||||
const raw = await orderRepo.findOneWithRelations(rels, query)
|
||||
|
||||
if (!raw) {
|
||||
throw new MedusaError(
|
||||
|
||||
+890
-6
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user