From 3afd36cb06de608f6ad69046ebef42563b3718c5 Mon Sep 17 00:00:00 2001 From: Camille31 Date: Sun, 27 Nov 2016 11:10:31 +0100 Subject: [PATCH] Add a view to show user movie ratings and add/update ratings. --- .../controller/MainController.java | 44 ++++++++++++ .../movierecommender/model/Movie.java | 2 +- .../movierecommender/model/Rating.java | 67 +++++++++++++++++++ .../webapp/WEB-INF/views/movieratings.jsp | 57 ++++++++++++++++ 4 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/camillepradel/movierecommender/model/Rating.java create mode 100644 src/main/webapp/WEB-INF/views/movieratings.jsp diff --git a/src/main/java/com/camillepradel/movierecommender/controller/MainController.java b/src/main/java/com/camillepradel/movierecommender/controller/MainController.java index aa61d14..4069439 100644 --- a/src/main/java/com/camillepradel/movierecommender/controller/MainController.java +++ b/src/main/java/com/camillepradel/movierecommender/controller/MainController.java @@ -5,12 +5,15 @@ import java.util.LinkedList; import java.util.List; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.bind.annotation.RequestMethod; import com.camillepradel.movierecommender.model.Genre; import com.camillepradel.movierecommender.model.Movie; +import com.camillepradel.movierecommender.model.Rating; @Controller public class MainController { @@ -48,4 +51,45 @@ public class MainController { mv.addObject("movies", movies); return mv; } + + @RequestMapping(value = "/movieratings", method = RequestMethod.GET) + public ModelAndView showMoviesRattings( + @RequestParam(value = "user_id", required = true) Integer userId) { + System.out.println("GET /movieratings for user " + userId); + + // TODO: write query to retrieve all movies from DB + List allMovies = new LinkedList(); + Genre genre0 = new Genre(0, "genre0"); + Genre genre1 = new Genre(1, "genre1"); + Genre genre2 = new Genre(2, "genre2"); + allMovies.add(new Movie(0, "Titre 0", Arrays.asList(new Genre[] {genre0, genre1}))); + allMovies.add(new Movie(1, "Titre 1", Arrays.asList(new Genre[] {genre0, genre2}))); + allMovies.add(new Movie(2, "Titre 2", Arrays.asList(new Genre[] {genre1}))); + allMovies.add(new Movie(3, "Titre 3", Arrays.asList(new Genre[] {genre0, genre1, genre2}))); + + // TODO: write query to retrieve all ratings from the specified user + List ratings = new LinkedList(); + ratings.add(new Rating(new Movie(0, "Titre 0", Arrays.asList(new Genre[] {genre0, genre1})), userId, 3)); + ratings.add(new Rating(new Movie(2, "Titre 2", Arrays.asList(new Genre[] {genre1})), userId, 4)); + + ModelAndView mv = new ModelAndView("movieratings"); + mv.addObject("userId", userId); + mv.addObject("allMovies", allMovies); + mv.addObject("ratings", ratings); + + return mv; + } + + @RequestMapping(value = "/movieratings", method = RequestMethod.POST) + public String saveOrUpdateRating(@ModelAttribute("rating") Rating rating) { + System.out.println("POST /movieratings for user " + rating.getUserId() + + ", movie " + rating.getMovie().getId() + + ", score " + rating.getScore()); + + // TODO: add query which + // - add rating between specified user and movie if it doesn't exist + // - update it if it does exist + + return "redirect:/movieratings?user_id=" + rating.getUserId(); + } } diff --git a/src/main/java/com/camillepradel/movierecommender/model/Movie.java b/src/main/java/com/camillepradel/movierecommender/model/Movie.java index 7ef72be..bbf0407 100644 --- a/src/main/java/com/camillepradel/movierecommender/model/Movie.java +++ b/src/main/java/com/camillepradel/movierecommender/model/Movie.java @@ -14,7 +14,7 @@ public class Movie { this.genres = genres; } - public long getId() { + public int getId() { return this.id; } diff --git a/src/main/java/com/camillepradel/movierecommender/model/Rating.java b/src/main/java/com/camillepradel/movierecommender/model/Rating.java new file mode 100644 index 0000000..5171bc7 --- /dev/null +++ b/src/main/java/com/camillepradel/movierecommender/model/Rating.java @@ -0,0 +1,67 @@ +package com.camillepradel.movierecommender.model; + +import java.util.Arrays; + +public class Rating { + + private Movie movie; + private int userId; + private int score; + + public Rating() { + this.movie = null; + this.userId = 0; + this.score = 0; + } + + public Rating(Movie movie, int userId, int score) { + this.movie = movie; + this.userId = userId; + this.score = score; + } + + public Rating(Movie movie, int userId) { + this.movie = movie; + this.userId = userId; + this.score = 0; + } + + public Movie getMovie() { + return this.movie; + } + + public void setMovie(Movie movie) { + this.movie = movie; + } + + // pseudo getter and setter for movie id + // (in order to automatically serialize Rating object on form submission) + + public int getMovieId() { + return this.movie.getId(); + } + + public void setMovieId(int movieId) { + // TODO: get movie with id movieId from database + String title = "Titre"; + Genre genre0 = new Genre(0, "genre0"); + Genre genre1 = new Genre(1, "genre1"); + this.movie = new Movie(movieId, title, Arrays.asList(new Genre[] {genre0, genre1})); + } + + public int getUserId() { + return this.userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getScore() { + return this.score; + } + + public void setScore(int score) { + this.score = score; + } +} diff --git a/src/main/webapp/WEB-INF/views/movieratings.jsp b/src/main/webapp/WEB-INF/views/movieratings.jsp new file mode 100644 index 0000000..f811aa8 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/movieratings.jsp @@ -0,0 +1,57 @@ +<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> + + + +Films + + + +

+ Vos films notés +

+
    + +
  • + ${rating.getMovie().id} - ${rating.score} +
  • +
    +
+ +

+ Ajouter une note +

+
    + + + + + + + + + +
  • + ${movie.title} - ${score} (user id: ${userId}, movie id: ${movie.id}) +
    + + + checked> + checked> + checked> + checked> + checked> +
    +
      + +
    • + ${genre.name} +
    • +
      +
    +
  • +
    +
+ + \ No newline at end of file