From 42f675d129ddd3a9d9515e2e2fd2d70effadc594 Mon Sep 17 00:00:00 2001 From: Muthu Kumar Date: Mon, 27 Jul 2020 14:25:35 +0530 Subject: [PATCH] [feat] better error handling --- index.js | 213 +++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 126 insertions(+), 87 deletions(-) diff --git a/index.js b/index.js index 477aee7..ab57631 100644 --- a/index.js +++ b/index.js @@ -28,15 +28,22 @@ const tmdb = axios.create({ }, }); -(async function main() { - const posterRoot = await tmdb +const getProot = () => + tmdb .get("/configuration", { params: { api_key: process.env.TMDB_KEY, }, }) .then(res => res.data) - .then(data => data.images.base_url + "w500"); + .then(data => data.images.base_url + "w500") + .catch(e => { + console.error("ERR on tmdb configuration", e.message); + return getProot(); + }); + +(async function main() { + const posterRoot = await getProot(); app.use(bodyParser.json()); @@ -69,7 +76,7 @@ const tmdb = axios.create({ res.send({ success: true, msg: "Successfully created user." }); } catch (e) { - console.log(e); + console.error("ERR on /register", e.message); res.statusCode = 500; res.send({ @@ -103,8 +110,6 @@ const tmdb = axios.create({ const verifyUser = async (req, res, next) => { if (!req.headers["authentication"]) { - console.log(req.headers); - res.statusCode = 401; return res.send({ success: false, @@ -129,113 +134,147 @@ const tmdb = axios.create({ }; app.get("/search/:query", verifyUser, async (req, res) => { - const results = ( - await tmdb.get(`/search/movie`, { - params: { - query: req.params.query, - api_key: process.env.TMDB_KEY, + try { + const results = ( + await tmdb.get(`/search/movie`, { + params: { + query: req.params.query, + api_key: process.env.TMDB_KEY, + }, + }) + ).data.results; + + const movies = results.map( + ({ poster_path, overview, release_date, id, title }) => { + const movie = { + poster: posterRoot + poster_path, + overview, + release: release_date, + movieId: id, + title, + }; + return movie; }, - }) - ).data.results; + ); - const movies = results.map( - ({ poster_path, overview, release_date, id, title }) => { - const movie = { - poster: posterRoot + poster_path, - overview, - release: release_date, - movieId: id, - title, - }; - return movie; - }, - ); + res.send({ success: true, results: movies }); + } catch (e) { + console.error("ERR on /search", e.message); - res.send({ success: true, results: movies }); + res.statusCode = 500; + res.send({ + success: false, + msg: "An error occured, please try again", + }); + } }); app.get("/movie/:id", verifyUser, async (req, res) => { - const fromDB = await Movie.findOne({ movieId: req.params.id }); + try { + const fromDB = await Movie.findOne({ movieId: req.params.id }); - if (!fromDB) { - const result = await tmdb.get(`/movie/${req.params.id}`, { - api_key: process.env.TMDB_KEY, - }); + if (!fromDB) { + const result = ( + await tmdb.get(`/movie/${req.params.id}`, { + params: { api_key: process.env.TMDB_KEY }, + }) + ).data; - const movie = { - poster: posterRoot + result.poster_path, - overview: result.overview, - release: result.release_date, - movieId: req.params.id, - title: result.title, - }; + const movie = { + poster: posterRoot + result.poster_path, + overview: result.overview, + release: result.release_date, + movieId: req.params.id, + title: result.title, + }; - res.send(movie); + res.send(movie); - await Movie.create(movie); - } else { - const data = await Userdata.findOne({ - userId: req["Container"].user._id, - movieId: req.params.id, - }); + await Movie.create(movie); + } else { + const data = await Userdata.findOne({ + userId: req["Container"].user._id, + movieId: req.params.id, + }); - const movie = fromDB.toJSON(); + const movie = fromDB.toJSON(); - if (data) { - movie.watchStatus = data.watchStatus; - movie.rating = data.rating; - } + if (data) { + movie.watchStatus = data.watchStatus; + movie.rating = data.rating; + } + + movie.poster = posterRoot + movie.poster; - movie.poster = posterRoot + movie.poster; + delete movie._id; + delete movie.__v; - delete movie._id; - delete movie.__v; + res.send(movie); + } + } catch (e) { + console.error("ERR on /movie", e.message); - res.send(movie); + res.statusCode = 500; + res.send({ + success: false, + msg: "An error occured, please try again", + }); } }); app.post("/movie/:id", verifyUser, async (req, res) => { - const userId = req["Container"].user._id; - const movieId = req.params.id; + try { + const userId = req["Container"].user._id; + const movieId = req.params.id; - const { watchStatus, rating } = req.body; + const { watchStatus, rating } = req.body; - if (!movieId) { - res.statusCode = 400; - return res.send({ success: false, msg: "movieId was not sent." }); - } + if (!movieId) { + res.statusCode = 400; + return res.send({ + success: false, + msg: "movieId was not sent.", + }); + } - if (watchStatus && !WATCH_STATUS.includes(watchStatus)) { - res.statusCode = 400; - return res.send({ - success: false, - msg: "watchStatus must be one of " + WATCH_STATUS.join(", "), - }); - } + if (watchStatus && !WATCH_STATUS.includes(watchStatus)) { + res.statusCode = 400; + return res.send({ + success: false, + msg: + "watchStatus must be one of " + WATCH_STATUS.join(", "), + }); + } - if (rating && !RATINGS.includes(rating)) { - res.statusCode = 400; - return res.send({ + if (rating && !RATINGS.includes(rating)) { + res.statusCode = 400; + return res.send({ + success: false, + msg: "rating must be one of " + RATINGS.join(", "), + }); + } + + await Userdata.updateOne( + { userId, movieId }, + { + userId, + movieId, + watchStatus: req.body.watchStatus, + rating: req.body.rating, + }, + { + upsert: true, + }, + ); + + res.send({ success: true }); + } catch { + res.statusCode = 500; + res.send({ success: false, - msg: "rating must be one of " + RATINGS.join(", "), + msg: "An error occured, please try again", }); } - - await Userdata.updateOne( - { userId, movieId }, - { - userId, - movieId, - watchStatus: req.body.watchStatus, - rating: req.body.rating, - }, - { - upsert: true, - }, - ); - - res.send({ success: true }); }); app.listen(process.env.PORT, () =>