diff --git a/src/repositories/partRepository.js b/src/repositories/partRepository.js index e93675b0b1622862b74bdc5ce5544fa7ee5d13b7..feb5c6dd84679282111044cce130744e186d65ff 100644 --- a/src/repositories/partRepository.js +++ b/src/repositories/partRepository.js @@ -72,18 +72,24 @@ const PartRepository = { async getFilteredCombinations(queryValues) { const query = ` - SELECT - c.id AS combination_id, - array_agg(r.part_id) AS partIds - FROM combinations c - LEFT JOIN relations r ON c.id = r.combination_id - WHERE r.combination_id IN ( - SELECT DISTINCT combination_id + WITH input_parts AS ( + SELECT array_agg(unnest) AS required_parts + FROM unnest($1::int[]) AS unnest + ), + parts AS ( + SELECT + combination_id, + array_agg(part_id ORDER BY part_id) AS existing_parts FROM relations - WHERE part_id = ANY($1::int[]) + GROUP BY combination_id ) - GROUP BY c.id; + SELECT + p.combination_id, + p.existing_parts AS partIds + FROM parts p, input_parts i + WHERE p.existing_parts @> i.required_parts; `; + const result = await pool.query(query, queryValues); return result.rows; },