Untitled
unknown
java
3 years ago
4.3 kB
6
Indexable
package me.xander.filmfestival;
import me.xander.filmfestival.domain.Film;
import me.xander.filmfestival.domain.Score;
import me.xander.filmfestival.service.FilmFestivalService;
import me.xander.filmfestival.validator.FilmValidator;
import me.xander.filmfestival.validator.ScoreValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Comparator;
import java.util.List;
@Controller
@RequestMapping("/films")
@SessionAttributes()
public class FilmFestivalController {
@Autowired
private FilmValidator filmValidator;
@Autowired
private ScoreValidator scoreValidator;
@Autowired
private FilmFestivalService filmFestivalService;
@GetMapping("/overzicht")
public String overzicht(Model model, String addedFilm, String addedScore) {
final List<Film> filmListSorted = filmFestivalService.getFilms().stream().sorted(Comparator.comparing(Film::getName)).toList();
model.addAttribute("filmList", filmListSorted);
model.addAttribute("magToevoegen", SecurityContextHolder.getContext().getAuthentication().getAuthorities().stream().anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ROLE_ADMIN")));
if (addedFilm != null) model.addAttribute("addedFilm", addedFilm);
if (addedScore != null) model.addAttribute("addedScore", addedScore);
return "films/overzicht";
}
@GetMapping("/ranking")
public String ranking(Model model, String addedFilm, String addedScore) {
final List<Film> filmListSorted = filmFestivalService.getFilms().stream()
.sorted(Comparator.comparingInt(Film::getTotalScore).reversed().thenComparing(Film::getName))
.toList();
model.addAttribute("filmList", filmListSorted);
return "films/ranking";
}
@GetMapping("/{id}")
public String filmDetail(@PathVariable String id, Model model) {
id = id.toLowerCase();
if (!id.matches("[a-z][a-z]\\d\\d\\d")) {
return "redirect:/films/overzicht";
}
final Film film = filmFestivalService.getFilm(id);
if (film == null) return "redirect:/films/overzicht";
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
model.addAttribute("score", filmFestivalService.getScoreFromUsername(film, authentication.getName()));
model.addAttribute("film", film);
model.addAttribute("algemeneScore", filmFestivalService.getScore(film));
return "films/detail";
}
@GetMapping("/voegtoe")
public String voegToe(Model model) {
model.addAttribute("film", new Film());
return "films/voegtoe";
}
@PostMapping("/voegtoe")
public String voeg(@Valid Film film, BindingResult result, Model model) {
filmValidator.validate(film, result);
if (filmFestivalService.getFilms().stream().anyMatch(film1 -> film1.getFilmCode().equals(film.getFilmCode()))) {
result.rejectValue("filmCode", "validation.filmcode.uniek");
}
if (result.hasErrors()) return "films/voegtoe";
filmFestivalService.voegFilmToe(film);
return "redirect:overzicht?addedFilm=" + film.getName();
}
@PostMapping("/addScore/{id}")
public String addScore(Score score, @PathVariable String id, BindingResult result, Model model) {
scoreValidator.validate(score, result);
if (result.hasErrors()) return "/" + id;
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
final Film film = filmFestivalService.getFilm(id);
filmFestivalService.addScore(film, authentication.getName(), score.getScore());
return "redirect:/films/overzicht?addedScore=" + film.getName();
}
}
Editor is loading...