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

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

Resolved bux for fronted and repaired filtering through title and genres for movies

  • Property mode set to 100644
File size: 6.1 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 lombok.Data;
12import org.springframework.format.annotation.DateTimeFormat;
13import org.springframework.security.authentication.AnonymousAuthenticationToken;
14import org.springframework.security.core.Authentication;
15import org.springframework.security.core.context.SecurityContextHolder;
16import org.springframework.security.core.userdetails.UserDetails;
17import org.springframework.stereotype.Controller;
18import org.springframework.ui.Model;
19import org.springframework.web.bind.annotation.*;
20
21import java.sql.Date;
22import java.time.LocalDate;
23import java.util.ArrayList;
24import java.util.List;
25
26@Controller
27@RequestMapping("/movies")
28public class MovieController {
29 private final MovieService movieService;
30 private final GenreService genreService;
31 private final PersonService personService;
32
33 public MovieController(MovieService movieService, GenreService genreService, PersonService personService) {
34 this.movieService = movieService;
35 this.genreService = genreService;
36 this.personService = personService;
37 }
38
39 @GetMapping
40 public String getMovies(@RequestParam(required = false) String titleQuery, Model model,
41 @RequestParam(required = false) String error){
42 List<Movie> movies;
43 if(titleQuery == null ) {
44 movies = movieService.listAll();
45 }
46 else{
47 movies = movieService.searchByTitle(titleQuery);
48 }
49
50 addModelPropertiesForUser(model);
51
52 List<List<Movie>> movie_rows = new ArrayList<>();
53 DesignFrontMovies.designMovieList(movies,movie_rows);
54 model.addAttribute("movies", movies);
55 model.addAttribute("movie_rows", movie_rows);
56 model.addAttribute("contentTemplate", "moviesList");
57 if (error != null && !error.equals(" "))
58 model.addAttribute("error",error);
59 return "template";
60 }
61
62 @GetMapping("/{id}")
63 public String getMovie(@PathVariable Integer id, Model model){
64 model.addAttribute("movie", movieService.findById(id));
65 addModelPropertiesForUser(model);
66 model.addAttribute("contentTemplate", "movieShow");
67 return "template";
68 }
69
70 @GetMapping("/add")
71 public String addMovie(Model model){
72
73 addModelProperties(model);
74 model.addAttribute("contentTemplate", "moviesAdd");
75 return "template";
76 }
77
78
79 @GetMapping("/{id}/delete")
80 public String deleteMovie(@PathVariable Integer id){
81
82 try {
83 this.movieService.deleteById(id);
84 return "redirect:/movies";
85
86 }
87 catch (RuntimeException exc){
88 return "redirect:/movies?error="+exc.getMessage();
89 }
90 }
91
92 @PostMapping("/save")
93 public String saveMovie(
94
95
96
97 @RequestParam String title,
98 @RequestParam String description,
99 @RequestParam String imageUrl,
100 @RequestParam(required = false) Double rating,
101 @RequestParam(required = false) Integer directorId,
102 @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate airingDate,
103 @RequestParam List<Integer> actors,
104 @RequestParam List<Integer> genres
105 ){
106
107 try {
108 Movie movie = this.movieService.save(title,description,imageUrl,Date.valueOf(airingDate),rating,directorId,actors,genres);
109
110 return "redirect:/movies";
111 }
112 catch (RuntimeException exc){
113 return "redirect:/movies?error="+exc.getMessage();
114 }
115 }
116 @PostMapping("/save/{movieId}")
117 public String updateMovie(
118
119
120 @PathVariable Integer movieId,
121 @RequestParam String title,
122 @RequestParam String description,
123 @RequestParam String imageUrl,
124 @RequestParam(required = false) Double rating,
125 @RequestParam(required = false) Integer directorId,
126 @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate airingDate,
127 @RequestParam List<Integer> actors,
128 @RequestParam List<Integer> genres
129 ){
130
131 try {
132 Movie movie = this.movieService.edit(movieId,title,description,imageUrl,Date.valueOf(airingDate),rating,directorId,actors,genres);
133
134 return "redirect:/movies";
135 }
136 catch (RuntimeException exc){
137 return "redirect:/movies?error="+exc.getMessage();
138 }
139 }
140
141
142
143 @GetMapping("/{id}/edit")
144 public String editMovie(@PathVariable Integer id, Model model){
145 try {
146 Movie movie = movieService.findById(id);
147 addModelProperties(model);
148 model.addAttribute("movie", movie);
149 model.addAttribute("director",movie.getDirector());
150 model.addAttribute("movieActors",movieService.findAllActorsForMovie(movie));
151 model.addAttribute("movieGenres",movieService.findAllGenresForMovie(movie));
152 model.addAttribute("contentTemplate", "moviesAdd");
153 return "template";
154
155 }
156 catch (RuntimeException exc){
157 return "redirect:/movies?error="+exc.getMessage();
158 }
159
160 }
161 private void addModelProperties(Model model){
162
163 model.addAttribute("directors", personService.findAllDirectors());
164 model.addAttribute("actors", personService.findAllActors());
165 model.addAttribute("genres", genreService.findAll());
166 }
167 private void addModelPropertiesForUser(Model model){
168 User user = LoggedUser.getLoggedUser();
169 model.addAttribute("likedMovies",this.movieService.findLikedMoviesByUser(user));
170 model.addAttribute("user",user);
171 }
172
173}
Note: See TracBrowser for help on using the repository browser.