const express = require("express"); const UserModel = require("../models/user"); const MovieModel = require("../models/movie"); const router = express.Router(); router.get("/", function (req, res) { UserModel.find({}).then(function (users) { res.json({ users: users }); }); }); router.get("/isliked/:movieId/:userId", async function (req, res) { const userId = await req.params["userId"]; console.log(userId); const movieId = await req.params["movieId"]; const user = await UserModel.findById(userId); const movieOid = await MovieModel.findOne({ id: movieId }); const likedMovies = user.liked_movies; const myIndex = likedMovies.indexOf(movieOid._id) + 1; console.log(Boolean(myIndex)); res.send(Boolean(myIndex)); }); router.post("/new", function (req, res) { const newUser = new UserModel({ email: req.body.email, firstName: req.body.firstName, lastName: req.body.lastName, }); newUser .save() .then(function (newDocument) { res.status(201).json(newDocument); }) .catch(function (error) { console.error(error); if (error.code === 11000) { res.status(400).json({ message: `User with email "${newUser.email}" already exists`, }); } else { res.status(500).json({ message: "Error while creating the user" }); } }); }); router.put("/like", async function (req, res) { try { const userId = await req.body.userId; const movieId = await req.body.movieId; const movieOid = await MovieModel.findOne({ id: movieId }); const user = await UserModel.findById(userId); const likedMovies = user.liked_movies; const myIndex = likedMovies.indexOf(movieOid._id); if (myIndex == -1) { likedMovies.splice(myIndex, 1); await UserModel.findByIdAndUpdate(userId, { liked_movies: likedMovies.concat([movieOid._id]), }); console.log(movieOid.title); console.log(movieOid._id); res.send("Done"); } else { console.log(movieOid.title); console.log(movieOid._id); console.log("This movie is already liked"); res.send("This movie is already liked"); } } catch (error) { console.log(error); res.send("Internal problem"); } }); router.put("/unlike", async function (req, res) { try { const userId = await req.body.userId; const movieId = await req.body.movieId; const movieOid = await MovieModel.findOne({ id: movieId }); const user = await UserModel.findById(userId); const likedMovies = user.liked_movies; const myIndex = likedMovies.indexOf(movieOid._id); if (myIndex !== -1) { likedMovies.splice(myIndex, 1); await UserModel.findByIdAndUpdate(userId, { liked_movies: likedMovies, }); res.send("Done"); console.log(movieOid.title); console.log(movieOid._id); } else { res.send("This movie wasn't liked"); console.log(movieOid.title); console.log(movieOid._id); console.log("This movie wasn't liked"); } } catch (error) { console.log(error); res.send("Internal problem"); } }); router.delete("/:userId", function (req, res) { UserModel.deleteOne({ _id: req.params.userId }) .then(function () { res.status(204).json({ message: "User successfully deleted" }); }) .catch(function () { res.status(500).json({ message: "Error while deleting the user" }); }); }); module.exports = router;