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

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

Model-database resolved bugs for mapping

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