games-store-back/controllers/products.js

103 lines
2.9 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] });
// The following comment is for dev debugging (e.g, To test whether nodemon is working):
/*
res.status(result.status).json({products:[{_id:"63b5f85dae0a4537077d63cc", name:"MICHELLLL", price:6499, thumbnail:"http://http2.mlstatic.com/D_799755-MLA47058389754_082021-I.jpg", description:"",quantity:7}]});
*/
}));
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;