games-store-back/controllers/products.js
Michel Pereira 0d7e00420c feat: Add 'getAllFiltered' in SERVICES and fix it in MODEL
getAllFiltered is a funtion to handle with query string requests
2021-12-27 10:49:09 -03:00

95 lines
2.6 KiB
JavaScript

const router = require('express').Router();
const rescue = require('express-rescue');
const products = require('../services/products');
const CREATED = 201;
const OK = 200;
router.get('/', rescue(async (_req, res) => {
const result = await products.getAll();
res.status(result.status).json({ products: [...result.productS] });
}));
router.get('/search', rescue(async (req, res) => {
const { name } = req.query;
const result = await products.getAllFiltered(name);
res.status(result.status).json({ products: [...result.products],
message: result.message });
}));
router.get('/:id', async (req, res) => {
const { id } = req.params;
const result = await products.getById(id);
if (result.code) {
return res.status(result.status).json({
err: {
code: result.code,
message: result.message,
},
});
}
const { _id, name, quantity, price, thumbnail, description } = result;
const productData = { id: _id, name, quantity, price, thumbnail, description };
res.status(OK).json(productData);
});
router.post('/', rescue(async (req, res) => {
const { name, quantity, price, thumbnail, description } = req.body;
const productData = { name, quantity, price, thumbnail, description };
const result = await products.create(productData);
if (result.code) {
return res.status(result.status).json({
err: {
code: result.code,
message: result.message,
},
});
}
res.status(CREATED).json({ _id: result, name, quantity });
}));
router.put('/:id', rescue(async (req, res) => {
const { id } = req.params;
const { name, quantity, price, thumbnail, description } = req.body;
const productData = { name, quantity, price, thumbnail, description };
const updateLog = await products.update({ id, ...productData });
if (updateLog.code) {
return res.status(updateLog.status).json({
err: {
code: updateLog.code,
message: updateLog.message,
},
});
}
res.status(OK).json({ id, name, quantity });
}));
router.delete('/:id', rescue(async (req, res) => {
const { id } = req.params;
const result = await products.deleteIt(id);
if (result.code) {
return res.status(result.status).json({
err: {
code: result.code,
message: result.message,
},
});
}
const { _id, name, quantity } = result;
res.status(OK).json({ id: _id, name, quantity });
}));
module.exports = router;