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

main
Last change on this file since 7fafead was 7fafead, checked in by Test <matonikolov77@…>, 2 years ago

Resolving models

  • Property mode set to 100644
File size: 8.6 KB
Line 
1package com.wediscussmovies.project.web.controller;
2
3import com.wediscussmovies.project.exception.MovieIdNotFoundException;
4import com.wediscussmovies.project.model.Genre;
5import com.wediscussmovies.project.model.Movie;
6import com.wediscussmovies.project.model.Person;
7import com.wediscussmovies.project.service.GenreService;
8import com.wediscussmovies.project.service.MovieService;
9import com.wediscussmovies.project.service.PersonService;
10import org.springframework.stereotype.Controller;
11import org.springframework.ui.Model;
12import org.springframework.web.bind.annotation.*;
13
14import java.sql.Date;
15import java.util.LinkedList;
16import java.util.List;
17import java.util.Optional;
18
19@Controller
20@RequestMapping("/movies")
21public class MovieController {
22 private final MovieService movieService;
23 private final GenreService genreService;
24 private final PersonService personService;
25
26 public MovieController(MovieService movieService, GenreService genreService, PersonService personService) {
27 this.movieService = movieService;
28 this.genreService = genreService;
29 this.personService = personService;
30 }
31
32 @GetMapping
33 public String getMovies(@RequestParam(required = false) String titleQuery, Model model){
34 List<Movie> movies;
35 if(titleQuery == null || titleQuery.isEmpty()) {
36 movies = movieService.listAll();
37 }
38 else{
39 movies = movieService.searchByTitle(titleQuery);
40 }
41
42 movies.sort(Movie.comparatorTitle);
43
44 model.addAttribute("movies", movies);
45 model.addAttribute("contentTemplate", "moviesList");
46 return "template";
47 }
48
49
50 @GetMapping("/add")
51 public String addMovie(Model model){
52 model.addAttribute("directors", personService.findAllDirectors());
53 model.addAttribute("actors", personService.findAllActors());
54 model.addAttribute("genres", genreService.findAll());
55 model.addAttribute("contentTemplate", "moviesAdd");
56 return "template";
57 }
58
59
60 @PostMapping("/{id}/delete")
61 public String addMovie(@PathVariable Long id){
62 Optional<Movie> movie = movieService.findById(id);
63 if(movie.isPresent()){
64 movieService.deleteById(movie.get().getId());
65 }
66 return "redirect:/movies";
67 }
68
69 @PostMapping("/add/confirm")
70 public String addMoviePost(@RequestParam String title,
71 @RequestParam String description,
72 @RequestParam String image_url,
73 @RequestParam Date airing_date,
74 @RequestParam Double rating,
75 @RequestParam Integer director_id,
76 @RequestParam List<Integer> actors,
77 @RequestParam List<Integer> genres,
78 Model model){
79 if(title == null || title.isEmpty() ||
80 description == null || description.isEmpty() ||
81 image_url == null || image_url.isEmpty() ||
82 airing_date == null ||
83 rating == null ||
84 director_id == null ||
85 actors == null || actors.size() == 0 ||
86 genres == null || genres.size() == 0)
87 {
88 model.addAttribute("error", "Not enough attributes, make sure all values are inputted, all of them are required");
89 model.addAttribute("hasError", true);
90 return "redirect:/add";
91 }
92 List<Person> actorsList = new LinkedList<>();
93 for(Integer id: actors){
94 Optional<Person> person = personService.findActorById(id);
95 if(person.isEmpty()){
96 model.addAttribute("error", "The actor with ID {" + id + "} was not found.");
97 model.addAttribute("hasError", true);
98 return "redirect:/add";
99 }
100 actorsList.add(person.get());
101 }
102
103 List<Genre> genreList = new LinkedList<>();
104 for(Integer id: genres){
105 Optional<Genre> genre = genreService.findById(id);
106 if(genre.isEmpty()){
107 model.addAttribute("error", "The genre with ID {" + id + "} was not found.");
108 model.addAttribute("hasError", true);
109 return "redirect:/add";
110 }
111 genreList.add(genre.get());
112 }
113
114 Optional<Person> directorOp = personService.findDirectorById(director_id);
115 if(directorOp.isEmpty()){
116 model.addAttribute("error", "The director with ID {" + director_id + "} was not found.");
117 model.addAttribute("hasError", true);
118 return "redirect:/add";
119 }
120
121 Person director = directorOp.get();
122
123 Movie movie = new Movie(title, description, image_url, airing_date,
124 rating, director, actorsList, genreList);
125
126 movieService.save(movie);
127
128 return "redirect:/movies";
129 }
130
131 @PostMapping("/edit/confirm")
132 public String editMoviePost(
133 @RequestParam Long movie_id,
134 @RequestParam String title,
135 @RequestParam String description,
136 @RequestParam String image_url,
137 @RequestParam Date airing_date,
138 @RequestParam Double rating,
139 @RequestParam Integer director_id,
140 @RequestParam List<Integer> actors,
141 @RequestParam List<Integer> genres,
142 Model model){
143 if(
144 movie_id == null ||
145 title == null || title.isEmpty() ||
146 description == null || description.isEmpty() ||
147 image_url == null || image_url.isEmpty() ||
148 airing_date == null ||
149 rating == null ||
150 director_id == null ||
151 actors == null || actors.size() == 0 ||
152 genres == null || genres.size() == 0)
153 {
154 model.addAttribute("error", "Not enough attributes, make sure all values are inputted, all of them are required");
155 model.addAttribute("hasError", true);
156 return "redirect:/edit";
157 }
158
159 Optional<Movie> movieOptional = movieService.findById(movie_id);
160 if(movieOptional.isEmpty()){
161 model.addAttribute("error", "The movie with ID {" + movie_id + "} was not found.");
162 model.addAttribute("hasError", true);
163 return "redirect:/edit";
164 }
165 Movie movie = movieOptional.get();
166
167 List<Person> actorsList = new LinkedList<>();
168 for(Integer id: actors){
169 Optional<Person> person = personService.findActorById(id);
170 if(person.isEmpty()){
171 model.addAttribute("error", "The actor with ID {" + id + "} was not found.");
172 model.addAttribute("hasError", true);
173 return "redirect:/edit";
174 }
175 actorsList.add(person.get());
176 }
177
178 List<Genre> genreList = new LinkedList<>();
179 for(Integer id: genres){
180 Optional<Genre> genre = genreService.findById(id);
181 if(genre.isEmpty()){
182 model.addAttribute("error", "The genre with ID {" + id + "} was not found.");
183 model.addAttribute("hasError", true);
184 return "redirect:/edit";
185 }
186 genreList.add(genre.get());
187 }
188
189 Optional<Person> directorOp = personService.findDirectorById(director_id);
190 if(directorOp.isEmpty()){
191 model.addAttribute("error", "The director with ID {" + director_id + "} was not found.");
192 model.addAttribute("hasError", true);
193 return "redirect:/edit";
194 }
195
196 Person director = directorOp.get();
197
198 movieService.deleteById(movie_id);
199
200 movie.setActors(actorsList);
201 movie.setDirector(director);
202 movie.setGenres(genreList);
203 movie.setTitle(title);
204 movie.setDescription(description);
205 movie.setAringDate(airing_date);
206 movie.setImageUrl(image_url);
207 movie.setImbdRating(rating);
208
209 movieService.save(movie);
210
211 return "redirect:/movies";
212 }
213
214 @GetMapping("/{id}/edit")
215 public String editMovie(@PathVariable Long id, Model model){
216 Movie movie = movieService.findById(id).orElseThrow(() -> new MovieIdNotFoundException(id));
217 model.addAttribute("directors", personService.findAllDirectors());
218 model.addAttribute("actors", personService.findAllActors());
219 model.addAttribute("genres", genreService.findAll());
220 model.addAttribute("movie", movie);
221 model.addAttribute("contentTemplate", "moviesEdit");
222 return "template";
223 }
224}
Note: See TracBrowser for help on using the repository browser.