From 7bdca9999f09e4ab2d9a7917e2fcd63f3d37d22d Mon Sep 17 00:00:00 2001
From: LeeWxx <dnckd0903@naver.com>
Date: Mon, 2 Dec 2024 00:15:35 +0900
Subject: [PATCH] =?UTF-8?q?feat:=20partRepository=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/repositories/partRepository.js | 39 ++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/src/repositories/partRepository.js b/src/repositories/partRepository.js
index 43f5c04..e5553f0 100644
--- a/src/repositories/partRepository.js
+++ b/src/repositories/partRepository.js
@@ -17,6 +17,45 @@ const PartRepository = {
     const [info] = resp.rows;
     return info;
   },
+  async getColumnsByType(type) {
+    const resp = await pool.query(
+      `
+      SELECT column_name 
+      FROM information_schema.columns 
+      WHERE table_name = $1
+      ORDER BY ordinal_position;
+      `,
+      [`part_info_${type}`.toLowerCase()]
+    );
+    return resp.rows.map((row) => row.column_name);
+  },
+
+  async getFilterDataByTypeAndColumn(type, column) {
+    const query = `
+      SELECT DISTINCT ${column}
+      FROM part_info_${type}
+      WHERE ${column} IS NOT NULL
+      ORDER BY ${column}
+    `;
+    const resp = await pool.query(query);
+    return resp.rows.map((row) => row[column]);
+  },
+
+  async getPartsByFilters(partType, whereClauses, queryValues) {
+    const query = `
+  SELECT 
+    parts.id AS partId, 
+    parts.name, 
+    parts.image_url
+  FROM part_info_${partType.toLowerCase()} 
+  INNER JOIN parts 
+  ON part_info_${partType.toLowerCase()}.part_id = parts.id
+  ${whereClauses ? `WHERE ${whereClauses}` : ''}
+  LIMIT 20;
+`;
+    const result = await pool.query(query, queryValues);
+    return result.rows;
+  },
 };
 
 export default PartRepository;
-- 
GitLab