From 9d82eaaad23ff6784e3fcc4d69bbcfa62a39102e Mon Sep 17 00:00:00 2001 From: Claudio Maggioni Date: Mon, 28 Oct 2019 22:45:15 +0100 Subject: [PATCH] hw6: Fixed 201 (to test) --- .../routes/favourites_db/router.js | 43 +++++++++++-------- .../routes/favourites_db_promises/router.js | 32 ++++++++------ 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/hw6/Claudio_Maggioni/routes/favourites_db/router.js b/hw6/Claudio_Maggioni/routes/favourites_db/router.js index cb1d70b..03bea0c 100644 --- a/hw6/Claudio_Maggioni/routes/favourites_db/router.js +++ b/hw6/Claudio_Maggioni/routes/favourites_db/router.js @@ -29,8 +29,8 @@ router.post('/', (req, res) => { const data = { name: req.body.name, dataURL: req.body.dataURL, - bookmarked: req.body.bookmarked, - }; + bookmarked: req.body.bookmarked + } const favourite = new Favorite(data); if (req.body._id) { @@ -45,8 +45,7 @@ router.post('/', (req, res) => { } res.status = 201; - const _id = fav._id; - renderFav(req, res, Object.assign({ _id }, data), false); + renderFav(req, res, fav, false); }); }); @@ -62,19 +61,23 @@ router.get('/search', (req, res) => { findAndRender(filter, req, res); }); -router.get('/:id', (req, res) => { - Favorite.findById(parseId(req), (err, fav) => { - if (err) { - return error(err, res); - } +function findOne(id) { + return (req, res) => { + Favorite.findById(id(req), (err, fav) => { + if (err) { + return error(err, res); + } - if (notFound(fav, res)) { - return; - } + if (notFound(fav, res)) { + return; + } - renderFav(req, res, fav, false); - }); -}); + renderFav(req, res, fav, false); + }); + }; +} + +router.get('/:id', findOne(req => parseId(req))); function handleUpdate(partial = false) { return (req, res) => { @@ -95,17 +98,21 @@ function handleUpdate(partial = false) { } Favorite.findByIdAndUpdate(parseId(req), { $set: edit }, { - new: true, + new: false, upsert: true, setDefaultsOnInsert: true, + passRawResult: true, }, (err, fav) => { if (err) { return error(err, res); } - console.log(arguments); + if (fav == null) { + res.status = 201; + findOne(() => parseId(req))(req, res); + return; + } - // FIXME: return 201 on creation res.status = 200; renderFav(req, res, fav, false); }); diff --git a/hw6/Claudio_Maggioni/routes/favourites_db_promises/router.js b/hw6/Claudio_Maggioni/routes/favourites_db_promises/router.js index 3139d2f..ca08ca8 100644 --- a/hw6/Claudio_Maggioni/routes/favourites_db_promises/router.js +++ b/hw6/Claudio_Maggioni/routes/favourites_db_promises/router.js @@ -39,8 +39,7 @@ router.post('/', (req, res) => { catchErrs(favourite.save(), res).then(fav => { res.status = 201; - const _id = fav._id; - renderFav(req, res, Object.assign({ _id }, data), false); + renderFav(req, res, fav, false); }); }); @@ -56,15 +55,19 @@ router.get('/search', (req, res) => { findAndRender(filter, req, res); }); -router.get('/:id', (req, res) => { - catchErrs(Favorite.findById(parseId(req)), res).then(fav => { - if (notFound(fav, res)) { - return; - } +function findOne(id) { + return (req, res) => { + catchErrs(Favorite.findById(id(req)), res).then(fav => { + if (notFound(fav, res)) { + return; + } - renderFav(req, res, fav, false); - }); -}); + renderFav(req, res, fav, false); + }); + }; +} + +router.get('/:id', findOne(req => parseId(req))); function handleUpdate(partial = false) { return (req, res) => { @@ -84,13 +87,16 @@ function handleUpdate(partial = false) { } catchErrs(Favorite.findByIdAndUpdate(parseId(req), { $set: edit }, { - new: true, + new: false, upsert: true, setDefaultsOnInsert: true, }), res).then(fav => { - console.log(arguments); + if (fav == null) { + res.status = 201; + findOne(() => parseId(req))(req, res); + return; + } - // FIXME: return 201 on creation res.status = 200; renderFav(req, res, fav, false); });