diff --git a/models/ProductModel.js b/models/ProductModel.js index c616430..7070385 100644 --- a/models/ProductModel.js +++ b/models/ProductModel.js @@ -23,4 +23,16 @@ module.exports = class ProductModel { throw new Error(e); } } + + async findOneByName(name) { + try { + const q = `SELECT * FROM product WHERE name = $1;`; + const filter = [name]; + const result = await db.query(q, filter); + if (result.rows.length) return result.rows[0]; + return null; + } catch(e) { + throw new Error(e); + } + } } \ No newline at end of file diff --git a/routes/product.js b/routes/product.js index ef9a656..032ffd5 100644 --- a/routes/product.js +++ b/routes/product.js @@ -6,11 +6,22 @@ module.exports = (app) => { app.use('/api/product', router); router.get('/', async (req, res, next) => { - try { - const response = await ProductServiceInstance.getAll(); - res.status(200).send(response); - } catch(e) { - next(e); + const { name } = req.query; + + if (name) { + try { + const response = await ProductServiceInstance.getOneByName(name); + res.status(200).send(response); + } catch(e) { + next(e); + } + } else { + try { + const response = await ProductServiceInstance.getAll(); + res.status(200).send(response); + } catch(e) { + next(e); + } } }) diff --git a/services/ProductService.js b/services/ProductService.js index 7b6b3d9..c021573 100644 --- a/services/ProductService.js +++ b/services/ProductService.js @@ -22,4 +22,14 @@ module.exports = class ProductService { throw new Error(e); } } + + async getOneByName(name) { + try { + const result = await ProductInstance.findOneByName(name); + if (!result) throw createError(404, 'No products found.'); + return result; + } catch(e) { + throw new Error(e); + } + } } \ No newline at end of file