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

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

Added genre liking, fixed counter, improved paging, improved searches

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