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
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.service.GenreService;
8import com.wediscussmovies.project.service.MovieService;
9import com.wediscussmovies.project.service.PersonService;
10import com.wediscussmovies.project.web.DesignFrontMovies;
11import com.wediscussmovies.project.web.PageFrontMovies;
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;
18import org.springframework.stereotype.Controller;
19import org.springframework.ui.Model;
20import org.springframework.web.bind.annotation.*;
21
22import java.sql.Date;
23import java.time.LocalDate;
24import java.util.ArrayList;
25import java.util.List;
26
27@Controller
28@RequestMapping("/movies")
29public class MovieController {
30 private final MovieService movieService;
31 private final GenreService genreService;
32 private final PersonService personService;
33
34 public MovieController(MovieService movieService, GenreService genreService, PersonService personService) {
35 this.movieService = movieService;
36 this.genreService = genreService;
37 this.personService = personService;
38 }
39
40 @GetMapping("/old")
41 public String getMovies(@RequestParam(required = false) String titleQuery, Model model,
42 @RequestParam(required = false) String error){
43 List<Movie> movies;
44 if(titleQuery == null ) {
45 movies = movieService.listAll();
46 }
47 else{
48 movies = movieService.searchByTitle(titleQuery);
49 }
50
51 addModelPropertiesForUser(model);
52
53 List<List<Movie>> movie_rows = new ArrayList<>();
54 DesignFrontMovies.designMovieList(movies,movie_rows);
55 model.addAttribute("movies", movies);
56 model.addAttribute("movie_rows", movie_rows);
57 model.addAttribute("contentTemplate", "moviesList");
58 if (error != null && !error.equals(" "))
59 model.addAttribute("error",error);
60 return "template";
61 }
62
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
82 @GetMapping("/{id}")
83 public String getMovie(@PathVariable Integer id, Model model){
84 model.addAttribute("movie", movieService.findById(id));
85 addModelPropertiesForUser(model);
86 model.addAttribute("contentTemplate", "movieShow");
87 return "template";
88 }
89
90 @GetMapping("/add")
91 public String addMovie(Model model){
92
93 addModelProperties(model);
94 model.addAttribute("contentTemplate", "moviesAdd");
95 return "template";
96 }
97
98
99 @GetMapping("/{id}/delete")
100 public String deleteMovie(@PathVariable Integer id){
101
102 try {
103 this.movieService.deleteById(id);
104 return "redirect:/movies";
105
106 }
107 catch (RuntimeException exc){
108 return "redirect:/movies?error="+exc.getMessage();
109 }
110 }
111
112 @PostMapping("/save")
113 public String saveMovie(
114
115
116
117 @RequestParam String title,
118 @RequestParam String description,
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,
123 @RequestParam List<Integer> actors,
124 @RequestParam List<Integer> genres
125 ){
126
127 try {
128 Movie movie = this.movieService.save(title,description,imageUrl,Date.valueOf(airingDate),rating,directorId,actors,genres);
129
130 return "redirect:/movies";
131 }
132 catch (RuntimeException exc){
133 return "redirect:/movies?error="+exc.getMessage();
134 }
135 }
136 @PostMapping("/save/{movieId}")
137 public String updateMovie(
138
139
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();
158 }
159 }
160
161
162
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";
174
175 }
176 catch (RuntimeException exc){
177 return "redirect:/movies?error="+exc.getMessage();
178 }
179
180 }
181 private void addModelProperties(Model model){
182 model.addAttribute("directors", personService.findAllDirectors());
183 model.addAttribute("actors", personService.findAllActors());
184 model.addAttribute("genres", genreService.findAll());
185 }
186 private void addModelPropertiesForUser(Model model){
187 User user = LoggedUser.getLoggedUser();
188 model.addAttribute("likedMovies",this.movieService.findLikedMoviesByUser(user));
189 model.addAttribute("user",user);
190 }
191
192}
Note: See TracBrowser for help on using the repository browser.