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

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

Added CRUD for movies,persons,discussion,replies,genres
Added ajaxcalls

  • Property mode set to 100644
File size: 5.7 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
[7a0bf79]63
64 @GetMapping("/add")
65 public String addMovie(Model model){
[e0ef1b1]66
67 addModelProperties(model);
[7a0bf79]68 model.addAttribute("contentTemplate", "moviesAdd");
69 return "template";
70 }
71
72
[e0ef1b1]73 @GetMapping("/{id}/delete")
74 public String deleteMovie(@PathVariable Integer id){
[7a0bf79]75
[e0ef1b1]76 try {
77 this.movieService.deleteById(id);
78 return "redirect:/movies";
[7a0bf79]79
[e0ef1b1]80 }
81 catch (RuntimeException exc){
82 return "redirect:/movies?error="+exc.getMessage();
83 }
84 }
[7a0bf79]85
[e0ef1b1]86 @PostMapping("/save")
87 public String saveMovie(
[7a0bf79]88
89
90
[e0ef1b1]91 @RequestParam String title,
[7a0bf79]92 @RequestParam String description,
[e0ef1b1]93 @RequestParam String imageUrl,
94 @RequestParam(required = false) Double rating,
95 @RequestParam(required = false) Integer directorId,
96 @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate airingDate,
[7a0bf79]97 @RequestParam List<Integer> actors,
[e0ef1b1]98 @RequestParam List<Integer> genres
99 ){
[7a0bf79]100
[e0ef1b1]101 try {
102 Movie movie = this.movieService.save(title,description,imageUrl,Date.valueOf(airingDate),rating,directorId,actors,genres);
103
104 return "redirect:/movies";
[7a0bf79]105 }
[e0ef1b1]106 catch (RuntimeException exc){
107 return "redirect:/movies?error="+exc.getMessage();
[7a0bf79]108 }
[e0ef1b1]109 }
110 @PostMapping("/save/{movieId}")
111 public String updateMovie(
[7a0bf79]112
113
[e0ef1b1]114 @PathVariable Integer movieId,
115 @RequestParam String title,
116 @RequestParam String description,
117 @RequestParam String imageUrl,
118 @RequestParam(required = false) Double rating,
119 @RequestParam(required = false) Integer directorId,
120 @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate airingDate,
121 @RequestParam List<Integer> actors,
122 @RequestParam List<Integer> genres
123 ){
124
125 try {
126 Movie movie = this.movieService.edit(movieId,title,description,imageUrl,Date.valueOf(airingDate),rating,directorId,actors,genres);
127
128 return "redirect:/movies";
129 }
130 catch (RuntimeException exc){
131 return "redirect:/movies?error="+exc.getMessage();
[7a0bf79]132 }
[e0ef1b1]133 }
[7a0bf79]134
135
136
[e0ef1b1]137 @GetMapping("/{id}/edit")
138 public String editMovie(@PathVariable Integer id, Model model){
139 try {
140 Movie movie = movieService.findById(id);
141 addModelProperties(model);
142 model.addAttribute("movie", movie);
143 model.addAttribute("director",movie.getDirector());
144 model.addAttribute("movieActors",movieService.findAllActorsForMovie(movie));
145 model.addAttribute("movieGenres",movieService.findAllGenresForMovie(movie));
146 model.addAttribute("contentTemplate", "moviesAdd");
147 return "template";
[7a0bf79]148
[e0ef1b1]149 }
150 catch (RuntimeException exc){
151 return "redirect:/movies?error="+exc.getMessage();
152 }
[7a0bf79]153
154 }
[e0ef1b1]155 private void addModelProperties(Model model){
[7a0bf79]156
[e0ef1b1]157 model.addAttribute("directors", personService.findAllDirectors());
[7a0bf79]158 model.addAttribute("actors", personService.findAllActors());
159 model.addAttribute("genres", genreService.findAll());
160 }
[6e7b472]161}
Note: See TracBrowser for help on using the repository browser.