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;