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
Line 
1package com.wediscussmovies.project.web.controller;
2
3import com.wediscussmovies.project.LoggedUser;
4import com.wediscussmovies.project.model.Movie;
5import com.wediscussmovies.project.model.Person;
6import com.wediscussmovies.project.model.User;
7import com.wediscussmovies.project.querymodels.MovieLikesQM;
8import com.wediscussmovies.project.service.GenreService;
9import com.wediscussmovies.project.service.MovieService;
10import com.wediscussmovies.project.service.PersonService;
11import com.wediscussmovies.project.web.DesignFrontMovies;
12import com.wediscussmovies.project.web.PageFrontMovies;
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;
19import org.springframework.stereotype.Controller;
20import org.springframework.ui.Model;
21import org.springframework.web.bind.annotation.*;
22
23import java.sql.Date;
24import java.time.LocalDate;
25import java.util.ArrayList;
26import java.util.HashMap;
27import java.util.LinkedList;
28import java.util.List;
29
30@Controller
31@RequestMapping("/movies")
32public class MovieController {
33 private final MovieService movieService;
34 private final GenreService genreService;
35 private final PersonService personService;
36
37 public MovieController(MovieService movieService, GenreService genreService, PersonService personService) {
38 this.movieService = movieService;
39 this.genreService = genreService;
40 this.personService = personService;
41 }
42
43 @GetMapping("/old")
44 public String getMoviesOld(@RequestParam(required = false) String titleQuery, Model model,
45 @RequestParam(required = false) String error){
46 List<Movie> movies;
47 if(titleQuery == null ) {
48 movies = movieService.listAll();
49 }
50 else{
51 movies = movieService.searchByTitle(titleQuery);
52 }
53
54 addModelPropertiesForUser(model);
55
56 List<List<Movie>> movie_rows = new ArrayList<>();
57 DesignFrontMovies.designMovieList(movies,movie_rows);
58 model.addAttribute("movies", movies);
59 model.addAttribute("movie_rows", movie_rows);
60 model.addAttribute("contentTemplate", "moviesList");
61 model.addAttribute("genres", genreService.findAll());
62 if (error != null && !error.equals(" "))
63 model.addAttribute("error",error);
64 return "template";
65 }
66
67
68 @GetMapping
69 public String getMovies(@RequestParam(required = false) String titleQuery, Model model,
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);
78 //addModelPropertiesForMoviesLikes(model, movies);
79 model.addAttribute("movies", movies);
80 model.addAttribute("movie_rows", movie_rows);
81 model.addAttribute("genres", genreService.findAll());
82 model.addAttribute("contentTemplate", "moviesListPaged");
83 if (error != null && !error.equals(" "))
84 model.addAttribute("error",error);
85 return "template";
86 }
87
88 @GetMapping("/{id}")
89 public String getMovie(@PathVariable Integer id, Model model){
90 model.addAttribute("movie", movieService.findById(id));
91 addModelPropertiesForUser(model);
92 model.addAttribute("likes", movieService.findLikesForMovieById(id).getLikes());
93 model.addAttribute("contentTemplate", "movieShow");
94 return "template";
95 }
96
97 @GetMapping("/add")
98 public String addMovie(Model model){
99
100 addModelProperties(model);
101 model.addAttribute("contentTemplate", "moviesAdd");
102 return "template";
103 }
104
105
106 @GetMapping("/{id}/delete")
107 public String deleteMovie(@PathVariable Integer id){
108
109 try {
110 this.movieService.deleteById(id);
111 return "redirect:/movies";
112
113 }
114 catch (RuntimeException exc){
115 return "redirect:/movies?error="+exc.getMessage();
116 }
117 }
118
119 @PostMapping("/save")
120 public String saveMovie(
121
122
123
124 @RequestParam String title,
125 @RequestParam String description,
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,
130 @RequestParam List<Integer> actors,
131 @RequestParam List<Integer> genres
132 ){
133
134 try {
135 Movie movie = this.movieService.save(title,description,imageUrl,Date.valueOf(airingDate),rating,directorId,actors,genres);
136
137 return "redirect:/movies";
138 }
139 catch (RuntimeException exc){
140 return "redirect:/movies?error="+exc.getMessage();
141 }
142 }
143 @PostMapping("/save/{movieId}")
144 public String updateMovie(
145
146
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();
165 }
166 }
167
168
169
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";
181
182 }
183 catch (RuntimeException exc){
184 return "redirect:/movies?error="+exc.getMessage();
185 }
186
187 }
188 private void addModelProperties(Model model){
189 model.addAttribute("directors", personService.findAllDirectors());
190 model.addAttribute("actors", personService.findAllActors());
191 model.addAttribute("genres", genreService.findAll());
192 }
193 private void addModelPropertiesForUser(Model model){
194 User user = LoggedUser.getLoggedUser();
195 model.addAttribute("likedMovies",this.movieService.findLikedMoviesByUser(user));
196 model.addAttribute("user",user);
197 }
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 }
205
206}
Note: See TracBrowser for help on using the repository browser.