source: Git/src/main/java/com/wediscussmovies/project/web/controller/MovieController.java@ c02189f

main
Last change on this file since c02189f was c02189f, checked in by Petar Partaloski <ppartaloski@…>, 2 years ago

Added new core functionalities, fixed bugs and improved visual clarity

  • Property mode set to 100644
File size: 7.7 KB
RevLine 
[6e7b472]1package com.wediscussmovies.project.web.controller;
2
[2efe93e]3import com.wediscussmovies.project.LoggedUser;
[e0ef1b1]4import com.wediscussmovies.project.model.Movie;
5import com.wediscussmovies.project.model.Person;
6import com.wediscussmovies.project.model.User;
[c02189f]7import com.wediscussmovies.project.querymodels.MovieLikesQM;
[7a0bf79]8import com.wediscussmovies.project.service.GenreService;
[6e7b472]9import com.wediscussmovies.project.service.MovieService;
[7a0bf79]10import com.wediscussmovies.project.service.PersonService;
[7f36551]11import com.wediscussmovies.project.web.DesignFrontMovies;
[3c0f9a9]12import com.wediscussmovies.project.web.PageFrontMovies;
[e0ef1b1]13import lombok.Data;
14import org.springframework.format.annotation.DateTimeFormat;
15import org.springframework.security.authentication.AnonymousAuthenticationToken;
16import org.springframework.security.core.Authentication;
17import org.springframework.security.core.context.SecurityContextHolder;
18import org.springframework.security.core.userdetails.UserDetails;
[6e7b472]19import org.springframework.stereotype.Controller;
20import org.springframework.ui.Model;
[7a0bf79]21import org.springframework.web.bind.annotation.*;
[6e7b472]22
[7a0bf79]23import java.sql.Date;
[e0ef1b1]24import java.time.LocalDate;
[2efe93e]25import java.util.ArrayList;
[c02189f]26import java.util.HashMap;
27import java.util.LinkedList;
[6e7b472]28import java.util.List;
29
30@Controller
31@RequestMapping("/movies")
32public 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}
Note: See TracBrowser for help on using the repository browser.