Skip to content
Snippets Groups Projects
Select Git revision
  • 732165f6024074492a4e9f552ce7a83f6941bd5e
  • master default
  • goodpaths
  • movie-page
  • front-bilel
  • vieille-branche
  • octofront
  • branche-TP-de-Tom
8 results

users.js

Blame
  • user avatar
    El Yaagoubi Bilel authored
    732165f6
    History
    users.js 3.61 KiB
    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("/likedMovies/:userId", async function (req, res) {
      const userId = await req.params["userId"];
      const userPopulated = await UserModel.findById(userId).populate(
        "liked_movies"
      );
      res.send(userPopulated.liked_movies);
    });
    
    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;