From e87e56d1b3b16acc34bf694014f4670ad1cea0f8 Mon Sep 17 00:00:00 2001
From: LeeWxx <dnckd0903@naver.com>
Date: Thu, 5 Dec 2024 23:32:39 +0900
Subject: [PATCH] =?UTF-8?q?fix:=20=EC=A1=B0=ED=95=A9=20=ED=95=84=ED=84=B0?=
 =?UTF-8?q?=EB=A7=81=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/repositories/partRepository.js | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/repositories/partRepository.js b/src/repositories/partRepository.js
index e93675b..feb5c6d 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;
   },
-- 
GitLab