From 8c8c589b0fa720225a02005f9880ad7d1fbf5042 Mon Sep 17 00:00:00 2001 From: Sebastian Rindom Date: Tue, 14 Sep 2021 16:25:22 +0200 Subject: [PATCH] fix: 404 product --- packages/medusa/src/repositories/product.ts | 43 +++++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/packages/medusa/src/repositories/product.ts b/packages/medusa/src/repositories/product.ts index f565c86751..c88f090fb3 100644 --- a/packages/medusa/src/repositories/product.ts +++ b/packages/medusa/src/repositories/product.ts @@ -19,7 +19,12 @@ export class ProductRepository extends Repository { } const entitiesIds = entities.map(({ id }) => id) - const groupedRelations : { [toplevel: string]: string[]} = {} + if (entitiesIds.length === 0) { + // no need to continue + return [] + } + + const groupedRelations: { [toplevel: string]: string[] } = {} for (const rel of relations) { const [topLevel] = rel.split(".") if (groupedRelations[topLevel]) { @@ -32,35 +37,49 @@ export class ProductRepository extends Repository { const entitiesIdsWithRelations = await Promise.all( Object.entries(groupedRelations).map(([toplevel, rels]) => { let querybuilder = this.createQueryBuilder("products") - + if (toplevel === "variants") { - querybuilder = querybuilder.leftJoinAndSelect(`products.${toplevel}`, toplevel, "variants.deleted_at IS NULL") + querybuilder = querybuilder + .leftJoinAndSelect( + `products.${toplevel}`, + toplevel, + "variants.deleted_at IS NULL" + ) .orderBy({ - "variants.variant_rank": "ASC", + "variants.variant_rank": "ASC", }) } else { - querybuilder = querybuilder.leftJoinAndSelect(`products.${toplevel}`, toplevel) + querybuilder = querybuilder.leftJoinAndSelect( + `products.${toplevel}`, + toplevel + ) } - for(const rel of rels) { + for (const rel of rels) { const [_, rest] = rel.split(".") if (!rest) { continue } // Regex matches all '.' except the rightmost - querybuilder = querybuilder.leftJoinAndSelect(rel.replace(/\.(?=[^.]*\.)/g,"__"), rel.replace(".", "__")) + querybuilder = querybuilder.leftJoinAndSelect( + rel.replace(/\.(?=[^.]*\.)/g, "__"), + rel.replace(".", "__") + ) } - + return querybuilder - .where("products.deleted_at IS NULL AND products.id IN (:...entitiesIds)", { entitiesIds }) - .getMany(); + .where( + "products.deleted_at IS NULL AND products.id IN (:...entitiesIds)", + { entitiesIds } + ) + .getMany() }) ).then(flatten) - + const entitiesAndRelations = entitiesIdsWithRelations.concat(entities) const entitiesAndRelationsById = groupBy(entitiesAndRelations, "id") - return map(entitiesAndRelationsById, entityAndRelations => + return map(entitiesAndRelationsById, (entityAndRelations) => merge({}, ...entityAndRelations) ) }