[6e7b472] | 1 | package com.wediscussmovies.project.web.controller;
|
---|
| 2 |
|
---|
[2efe93e] | 3 | import com.wediscussmovies.project.LoggedUser;
|
---|
[e0ef1b1] | 4 | import com.wediscussmovies.project.model.Movie;
|
---|
| 5 | import com.wediscussmovies.project.model.Person;
|
---|
| 6 | import com.wediscussmovies.project.model.User;
|
---|
[c02189f] | 7 | import com.wediscussmovies.project.querymodels.MovieLikesQM;
|
---|
[7a0bf79] | 8 | import com.wediscussmovies.project.service.GenreService;
|
---|
[6e7b472] | 9 | import com.wediscussmovies.project.service.MovieService;
|
---|
[7a0bf79] | 10 | import com.wediscussmovies.project.service.PersonService;
|
---|
[7f36551] | 11 | import com.wediscussmovies.project.web.DesignFrontMovies;
|
---|
[3c0f9a9] | 12 | import com.wediscussmovies.project.web.PageFrontMovies;
|
---|
[e0ef1b1] | 13 | import lombok.Data;
|
---|
| 14 | import org.springframework.format.annotation.DateTimeFormat;
|
---|
| 15 | import org.springframework.security.authentication.AnonymousAuthenticationToken;
|
---|
| 16 | import org.springframework.security.core.Authentication;
|
---|
| 17 | import org.springframework.security.core.context.SecurityContextHolder;
|
---|
| 18 | import org.springframework.security.core.userdetails.UserDetails;
|
---|
[6e7b472] | 19 | import org.springframework.stereotype.Controller;
|
---|
| 20 | import org.springframework.ui.Model;
|
---|
[7a0bf79] | 21 | import org.springframework.web.bind.annotation.*;
|
---|
[6e7b472] | 22 |
|
---|
[7a0bf79] | 23 | import java.sql.Date;
|
---|
[e0ef1b1] | 24 | import java.time.LocalDate;
|
---|
[2efe93e] | 25 | import java.util.ArrayList;
|
---|
[c02189f] | 26 | import java.util.HashMap;
|
---|
| 27 | import java.util.LinkedList;
|
---|
[6e7b472] | 28 | import java.util.List;
|
---|
| 29 |
|
---|
| 30 | @Controller
|
---|
| 31 | @RequestMapping("/movies")
|
---|
| 32 | public class MovieController {
|
---|
| 33 | private final MovieService movieService;
|
---|
[7a0bf79] | 34 | private final GenreService genreService;
|
---|
| 35 | private final PersonService personService;
|
---|
[6e7b472] | 36 |
|
---|
[7a0bf79] | 37 | public MovieController(MovieService movieService, GenreService genreService, PersonService personService) {
|
---|
[6e7b472] | 38 | this.movieService = movieService;
|
---|
[7a0bf79] | 39 | this.genreService = genreService;
|
---|
| 40 | this.personService = personService;
|
---|
[6e7b472] | 41 | }
|
---|
| 42 |
|
---|
[3c0f9a9] | 43 | @GetMapping("/old")
|
---|
[c02189f] | 44 | public String getMoviesOld(@RequestParam(required = false) String titleQuery, Model model,
|
---|
[e0ef1b1] | 45 | @RequestParam(required = false) String error){
|
---|
[6e7b472] | 46 | List<Movie> movies;
|
---|
[3ded84d] | 47 | if(titleQuery == null ) {
|
---|
[6e7b472] | 48 | movies = movieService.listAll();
|
---|
| 49 | }
|
---|
| 50 | else{
|
---|
| 51 | movies = movieService.searchByTitle(titleQuery);
|
---|
| 52 | }
|
---|
[7a0bf79] | 53 |
|
---|
[7f36551] | 54 | addModelPropertiesForUser(model);
|
---|
[e0ef1b1] | 55 |
|
---|
[2efe93e] | 56 | List<List<Movie>> movie_rows = new ArrayList<>();
|
---|
[7f36551] | 57 | DesignFrontMovies.designMovieList(movies,movie_rows);
|
---|
[6e7b472] | 58 | model.addAttribute("movies", movies);
|
---|
[2efe93e] | 59 | model.addAttribute("movie_rows", movie_rows);
|
---|
[6e7b472] | 60 | model.addAttribute("contentTemplate", "moviesList");
|
---|
[c02189f] | 61 | model.addAttribute("genres", genreService.findAll());
|
---|
[e0ef1b1] | 62 | if (error != null && !error.equals(" "))
|
---|
| 63 | model.addAttribute("error",error);
|
---|
| 64 | return "template";
|
---|
[6e7b472] | 65 | }
|
---|
| 66 |
|
---|
[3c0f9a9] | 67 |
|
---|
| 68 | @GetMapping
|
---|
[c02189f] | 69 | public String getMovies(@RequestParam(required = false) String titleQuery, Model model,
|
---|
[3c0f9a9] | 70 | @RequestParam(required = false) String error, @RequestParam(required = false) String page){
|
---|
| 71 | if (page==null){
|
---|
| 72 | return "redirect:/movies?page=1";
|
---|
| 73 | }
|
---|
| 74 | addModelPropertiesForUser(model);
|
---|
| 75 | List<Movie> movies = PageFrontMovies.getPagedMovies(page, movieService, model);
|
---|
| 76 | List<List<Movie>> movie_rows = new ArrayList<>();
|
---|
| 77 | DesignFrontMovies.designMovieList(movies,movie_rows);
|
---|
[c02189f] | 78 | //addModelPropertiesForMoviesLikes(model, movies);
|
---|
[3c0f9a9] | 79 | model.addAttribute("movies", movies);
|
---|
| 80 | model.addAttribute("movie_rows", movie_rows);
|
---|
[c02189f] | 81 | model.addAttribute("genres", genreService.findAll());
|
---|
[3c0f9a9] | 82 | model.addAttribute("contentTemplate", "moviesListPaged");
|
---|
| 83 | if (error != null && !error.equals(" "))
|
---|
| 84 | model.addAttribute("error",error);
|
---|
| 85 | return "template";
|
---|
| 86 | }
|
---|
| 87 |
|
---|
[f25e8dd] | 88 | @GetMapping("/{id}")
|
---|
| 89 | public String getMovie(@PathVariable Integer id, Model model){
|
---|
| 90 | model.addAttribute("movie", movieService.findById(id));
|
---|
[7f36551] | 91 | addModelPropertiesForUser(model);
|
---|
[c02189f] | 92 | model.addAttribute("likes", movieService.findLikesForMovieById(id).getLikes());
|
---|
[f25e8dd] | 93 | model.addAttribute("contentTemplate", "movieShow");
|
---|
| 94 | return "template";
|
---|
| 95 | }
|
---|
[7a0bf79] | 96 |
|
---|
| 97 | @GetMapping("/add")
|
---|
| 98 | public String addMovie(Model model){
|
---|
[e0ef1b1] | 99 |
|
---|
| 100 | addModelProperties(model);
|
---|
[7a0bf79] | 101 | model.addAttribute("contentTemplate", "moviesAdd");
|
---|
| 102 | return "template";
|
---|
| 103 | }
|
---|
| 104 |
|
---|
| 105 |
|
---|
[e0ef1b1] | 106 | @GetMapping("/{id}/delete")
|
---|
| 107 | public String deleteMovie(@PathVariable Integer id){
|
---|
[7a0bf79] | 108 |
|
---|
[e0ef1b1] | 109 | try {
|
---|
| 110 | this.movieService.deleteById(id);
|
---|
| 111 | return "redirect:/movies";
|
---|
[7a0bf79] | 112 |
|
---|
[e0ef1b1] | 113 | }
|
---|
| 114 | catch (RuntimeException exc){
|
---|
| 115 | return "redirect:/movies?error="+exc.getMessage();
|
---|
| 116 | }
|
---|
| 117 | }
|
---|
[7a0bf79] | 118 |
|
---|
[e0ef1b1] | 119 | @PostMapping("/save")
|
---|
| 120 | public String saveMovie(
|
---|
[7a0bf79] | 121 |
|
---|
| 122 |
|
---|
| 123 |
|
---|
[e0ef1b1] | 124 | @RequestParam String title,
|
---|
[7a0bf79] | 125 | @RequestParam String description,
|
---|
[e0ef1b1] | 126 | @RequestParam String imageUrl,
|
---|
| 127 | @RequestParam(required = false) Double rating,
|
---|
| 128 | @RequestParam(required = false) Integer directorId,
|
---|
| 129 | @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate airingDate,
|
---|
[7a0bf79] | 130 | @RequestParam List<Integer> actors,
|
---|
[e0ef1b1] | 131 | @RequestParam List<Integer> genres
|
---|
| 132 | ){
|
---|
[7a0bf79] | 133 |
|
---|
[e0ef1b1] | 134 | try {
|
---|
| 135 | Movie movie = this.movieService.save(title,description,imageUrl,Date.valueOf(airingDate),rating,directorId,actors,genres);
|
---|
| 136 |
|
---|
| 137 | return "redirect:/movies";
|
---|
[7a0bf79] | 138 | }
|
---|
[e0ef1b1] | 139 | catch (RuntimeException exc){
|
---|
| 140 | return "redirect:/movies?error="+exc.getMessage();
|
---|
[7a0bf79] | 141 | }
|
---|
[e0ef1b1] | 142 | }
|
---|
| 143 | @PostMapping("/save/{movieId}")
|
---|
| 144 | public String updateMovie(
|
---|
[7a0bf79] | 145 |
|
---|
| 146 |
|
---|
[e0ef1b1] | 147 | @PathVariable Integer movieId,
|
---|
| 148 | @RequestParam String title,
|
---|
| 149 | @RequestParam String description,
|
---|
| 150 | @RequestParam String imageUrl,
|
---|
| 151 | @RequestParam(required = false) Double rating,
|
---|
| 152 | @RequestParam(required = false) Integer directorId,
|
---|
| 153 | @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate airingDate,
|
---|
| 154 | @RequestParam List<Integer> actors,
|
---|
| 155 | @RequestParam List<Integer> genres
|
---|
| 156 | ){
|
---|
| 157 |
|
---|
| 158 | try {
|
---|
| 159 | Movie movie = this.movieService.edit(movieId,title,description,imageUrl,Date.valueOf(airingDate),rating,directorId,actors,genres);
|
---|
| 160 |
|
---|
| 161 | return "redirect:/movies";
|
---|
| 162 | }
|
---|
| 163 | catch (RuntimeException exc){
|
---|
| 164 | return "redirect:/movies?error="+exc.getMessage();
|
---|
[7a0bf79] | 165 | }
|
---|
[e0ef1b1] | 166 | }
|
---|
[7a0bf79] | 167 |
|
---|
| 168 |
|
---|
| 169 |
|
---|
[e0ef1b1] | 170 | @GetMapping("/{id}/edit")
|
---|
| 171 | public String editMovie(@PathVariable Integer id, Model model){
|
---|
| 172 | try {
|
---|
| 173 | Movie movie = movieService.findById(id);
|
---|
| 174 | addModelProperties(model);
|
---|
| 175 | model.addAttribute("movie", movie);
|
---|
| 176 | model.addAttribute("director",movie.getDirector());
|
---|
| 177 | model.addAttribute("movieActors",movieService.findAllActorsForMovie(movie));
|
---|
| 178 | model.addAttribute("movieGenres",movieService.findAllGenresForMovie(movie));
|
---|
| 179 | model.addAttribute("contentTemplate", "moviesAdd");
|
---|
| 180 | return "template";
|
---|
[7a0bf79] | 181 |
|
---|
[e0ef1b1] | 182 | }
|
---|
| 183 | catch (RuntimeException exc){
|
---|
| 184 | return "redirect:/movies?error="+exc.getMessage();
|
---|
| 185 | }
|
---|
[7a0bf79] | 186 |
|
---|
| 187 | }
|
---|
[e0ef1b1] | 188 | private void addModelProperties(Model model){
|
---|
[3c0f9a9] | 189 | model.addAttribute("directors", personService.findAllDirectors());
|
---|
[7a0bf79] | 190 | model.addAttribute("actors", personService.findAllActors());
|
---|
| 191 | model.addAttribute("genres", genreService.findAll());
|
---|
| 192 | }
|
---|
[7f36551] | 193 | private void addModelPropertiesForUser(Model model){
|
---|
| 194 | User user = LoggedUser.getLoggedUser();
|
---|
| 195 | model.addAttribute("likedMovies",this.movieService.findLikedMoviesByUser(user));
|
---|
| 196 | model.addAttribute("user",user);
|
---|
[3c0f9a9] | 197 | }
|
---|
[c02189f] | 198 | private void addModelPropertiesForMoviesLikes(Model model, List<Movie> movies){
|
---|
| 199 | HashMap<Integer,MovieLikesQM> movieLikes = new HashMap<>();
|
---|
| 200 | for(Movie m: movies){
|
---|
| 201 | movieLikes.put(m.getMovieId(),movieService.findLikesForMovieById(m.getMovieId()));
|
---|
| 202 | }
|
---|
| 203 | model.addAttribute("movieLikes", movieLikes);
|
---|
| 204 | }
|
---|
[7f36551] | 205 |
|
---|
[6e7b472] | 206 | }
|
---|