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
RevLine 
[6e7b472]1package com.wediscussmovies.project.web.controller;
2
[e0ef1b1]3import com.wediscussmovies.project.model.Movie;
4import com.wediscussmovies.project.model.Person;
5import com.wediscussmovies.project.model.User;
[7a0bf79]6import com.wediscussmovies.project.service.GenreService;
[6e7b472]7import com.wediscussmovies.project.service.MovieService;
[7a0bf79]8import com.wediscussmovies.project.service.PersonService;
[e0ef1b1]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;
[6e7b472]15import org.springframework.stereotype.Controller;
16import org.springframework.ui.Model;
[7a0bf79]17import org.springframework.web.bind.annotation.*;
[6e7b472]18
[7a0bf79]19import java.sql.Date;
[e0ef1b1]20import java.time.LocalDate;
[6e7b472]21import java.util.List;
22
23@Controller
24@RequestMapping("/movies")
25public class MovieController {
26 private final MovieService movieService;
[7a0bf79]27 private final GenreService genreService;
28 private final PersonService personService;
[6e7b472]29
[7a0bf79]30 public MovieController(MovieService movieService, GenreService genreService, PersonService personService) {
[6e7b472]31 this.movieService = movieService;
[7a0bf79]32 this.genreService = genreService;
33 this.personService = personService;
[6e7b472]34 }
35
36 @GetMapping
[e0ef1b1]37 public String getMovies(@RequestParam(required = false) String titleQuery, Model model,
38 @RequestParam(required = false) String error){
[6e7b472]39 List<Movie> movies;
[3ded84d]40 if(titleQuery == null ) {
[6e7b472]41 movies = movieService.listAll();
42 }
43 else{
44 movies = movieService.searchByTitle(titleQuery);
45 }
[7a0bf79]46
[e0ef1b1]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 }
[7a0bf79]55
[6e7b472]56 model.addAttribute("movies", movies);
57 model.addAttribute("contentTemplate", "moviesList");
[e0ef1b1]58 if (error != null && !error.equals(" "))
59 model.addAttribute("error",error);
60 return "template";
[6e7b472]61 }
62
[f25e8dd]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 }
[7a0bf79]78
79 @GetMapping("/add")
80 public String addMovie(Model model){
[e0ef1b1]81
82 addModelProperties(model);
[7a0bf79]83 model.addAttribute("contentTemplate", "moviesAdd");
84 return "template";
85 }
86
87
[e0ef1b1]88 @GetMapping("/{id}/delete")
89 public String deleteMovie(@PathVariable Integer id){
[7a0bf79]90
[e0ef1b1]91 try {
92 this.movieService.deleteById(id);
93 return "redirect:/movies";
[7a0bf79]94
[e0ef1b1]95 }
96 catch (RuntimeException exc){
97 return "redirect:/movies?error="+exc.getMessage();
98 }
99 }
[7a0bf79]100
[e0ef1b1]101 @PostMapping("/save")
102 public String saveMovie(
[7a0bf79]103
104
105
[e0ef1b1]106 @RequestParam String title,
[7a0bf79]107 @RequestParam String description,
[e0ef1b1]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,
[7a0bf79]112 @RequestParam List<Integer> actors,
[e0ef1b1]113 @RequestParam List<Integer> genres
114 ){
[7a0bf79]115
[e0ef1b1]116 try {
117 Movie movie = this.movieService.save(title,description,imageUrl,Date.valueOf(airingDate),rating,directorId,actors,genres);
118
119 return "redirect:/movies";
[7a0bf79]120 }
[e0ef1b1]121 catch (RuntimeException exc){
122 return "redirect:/movies?error="+exc.getMessage();
[7a0bf79]123 }
[e0ef1b1]124 }
125 @PostMapping("/save/{movieId}")
126 public String updateMovie(
[7a0bf79]127
128
[e0ef1b1]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();
[7a0bf79]147 }
[e0ef1b1]148 }
[7a0bf79]149
150
151
[e0ef1b1]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";
[7a0bf79]163
[e0ef1b1]164 }
165 catch (RuntimeException exc){
166 return "redirect:/movies?error="+exc.getMessage();
167 }
[7a0bf79]168
169 }
[e0ef1b1]170 private void addModelProperties(Model model){
[7a0bf79]171
[e0ef1b1]172 model.addAttribute("directors", personService.findAllDirectors());
[7a0bf79]173 model.addAttribute("actors", personService.findAllActors());
174 model.addAttribute("genres", genreService.findAll());
175 }
[6e7b472]176}
Note: See TracBrowser for help on using the repository browser.