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

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

Fixed and added a better front end, improved clarity

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