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