source: Git/src/main/java/com/wediscussmovies/project/web/controller/MovieController.java@ 2efe93e

main
Last change on this file since 2efe93e was 2efe93e, checked in by Petar Partaloski <ppartaloski@…>, 2 years ago

Improved Front-End, added card view of movies

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