diff --git a/src/repositories/partRepository.js b/src/repositories/partRepository.js
index 43f5c0411286eb3b96dffb84879bfe8915d2eb81..e5553f0ba155db243348af461ad4d36ec684f544 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;