Ignore:
Timestamp:
01/16/22 03:40:31 (2 years ago)
Author:
Petar Partaloski <ppartaloski@…>
Branches:
main
Children:
2a5d6a3
Parents:
839f96a
Message:

Early implementations, MovieController CRUD implementation included

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/com/wediscussmovies/project/web/controller/MovieController.java

    r839f96a r7a0bf79  
    11package com.wediscussmovies.project.web.controller;
    22
     3import com.wediscussmovies.project.model.Genre;
    34import com.wediscussmovies.project.model.Movie;
     5import com.wediscussmovies.project.model.Person;
     6import com.wediscussmovies.project.model.exception.MovieIdNotFoundException;
     7import com.wediscussmovies.project.service.GenreService;
    48import com.wediscussmovies.project.service.MovieService;
     9import com.wediscussmovies.project.service.PersonService;
    510import org.springframework.stereotype.Controller;
    611import org.springframework.ui.Model;
    7 import org.springframework.web.bind.annotation.GetMapping;
    8 import org.springframework.web.bind.annotation.RequestMapping;
    9 import org.springframework.web.bind.annotation.RequestParam;
    10 
     12import org.springframework.web.bind.annotation.*;
     13
     14import java.sql.Date;
     15import java.util.LinkedList;
    1116import java.util.List;
     17import java.util.Optional;
    1218
    1319@Controller
     
    1521public class MovieController {
    1622    private final MovieService movieService;
    17 
    18     public MovieController(MovieService movieService) {
     23    private final GenreService genreService;
     24    private final PersonService personService;
     25
     26    public MovieController(MovieService movieService, GenreService genreService, PersonService personService) {
    1927        this.movieService = movieService;
     28        this.genreService = genreService;
     29        this.personService = personService;
    2030    }
    2131
     
    2939            movies = movieService.searchByTitle(titleQuery);
    3040        }
     41
     42        movies.sort(Movie.comparatorTitle);
     43
    3144        model.addAttribute("movies", movies);
    3245        model.addAttribute("contentTemplate", "moviesList");
     
    3447    }
    3548
     49
     50    @GetMapping("/add")
     51    public String addMovie(Model model){
     52        model.addAttribute("directors", personService.findAllDirectors());
     53        model.addAttribute("actors", personService.findAllActors());
     54        model.addAttribute("genres", genreService.findAll());
     55        model.addAttribute("contentTemplate", "moviesAdd");
     56        return "template";
     57    }
     58
     59
     60    @PostMapping("/{id}/delete")
     61    public String addMovie(@PathVariable int id){
     62        Optional<Movie> movie = movieService.findById(id);
     63        if(movie.isPresent()){
     64            movieService.deleteById(movie.get().getMovie_id());
     65        }
     66        return "redirect:/movies";
     67    }
     68
     69    @PostMapping("/add/confirm")
     70    public String addMoviePost(@RequestParam String title,
     71                               @RequestParam String description,
     72                               @RequestParam String image_url,
     73                               @RequestParam Date airing_date,
     74                               @RequestParam Float rating,
     75                               @RequestParam Integer director_id,
     76                               @RequestParam List<Integer> actors,
     77                               @RequestParam List<Integer> genres,
     78                               Model model){
     79        if(title == null || title.isEmpty() ||
     80        description == null || description.isEmpty() ||
     81        image_url == null || image_url.isEmpty() ||
     82        airing_date == null ||
     83        rating == null ||
     84        director_id == null ||
     85        actors == null || actors.size() == 0 ||
     86        genres == null || genres.size() == 0)
     87        {
     88            model.addAttribute("error", "Not enough attributes, make sure all values are inputted, all of them are required");
     89            model.addAttribute("hasError", true);
     90            return "redirect:/add";
     91        }
     92        List<Person> actorsList = new LinkedList<>();
     93        for(Integer id: actors){
     94            Optional<Person> person = personService.findActorById(id);
     95            if(person.isEmpty()){
     96                model.addAttribute("error", "The actor with ID {" + id + "} was not found.");
     97                model.addAttribute("hasError", true);
     98                return "redirect:/add";
     99            }
     100            actorsList.add(person.get());
     101        }
     102
     103        List<Genre> genreList = new LinkedList<>();
     104        for(Integer id: genres){
     105            Optional<Genre> genre = genreService.findById(id);
     106            if(genre.isEmpty()){
     107                model.addAttribute("error", "The genre with ID {" + id + "} was not found.");
     108                model.addAttribute("hasError", true);
     109                return "redirect:/add";
     110            }
     111            genreList.add(genre.get());
     112        }
     113
     114        Optional<Person> directorOp = personService.findDirectorById(director_id);
     115        if(directorOp.isEmpty()){
     116            model.addAttribute("error", "The director with ID {" + director_id + "} was not found.");
     117            model.addAttribute("hasError", true);
     118            return "redirect:/add";
     119        }
     120
     121        Person director = directorOp.get();
     122
     123        Movie movie = new Movie(title, description, image_url, airing_date,
     124                    rating, director, actorsList, genreList);
     125
     126        movieService.save(movie);
     127
     128        return "redirect:/movies";
     129    }
     130
     131    @PostMapping("/edit/confirm")
     132    public String editMoviePost(
     133                                @RequestParam Integer movie_id,
     134                                @RequestParam String title,
     135                               @RequestParam String description,
     136                               @RequestParam String image_url,
     137                               @RequestParam Date airing_date,
     138                               @RequestParam Float rating,
     139                               @RequestParam Integer director_id,
     140                               @RequestParam List<Integer> actors,
     141                               @RequestParam List<Integer> genres,
     142                               Model model){
     143        if(
     144                movie_id == null ||
     145                title == null || title.isEmpty() ||
     146                description == null || description.isEmpty() ||
     147                image_url == null || image_url.isEmpty() ||
     148                airing_date == null ||
     149                rating == null ||
     150                director_id == null ||
     151                actors == null || actors.size() == 0 ||
     152                genres == null || genres.size() == 0)
     153        {
     154            model.addAttribute("error", "Not enough attributes, make sure all values are inputted, all of them are required");
     155            model.addAttribute("hasError", true);
     156            return "redirect:/edit";
     157        }
     158
     159        Optional<Movie> movieOptional = movieService.findById(movie_id);
     160        if(movieOptional.isEmpty()){
     161            model.addAttribute("error", "The movie with ID {" + movie_id + "} was not found.");
     162            model.addAttribute("hasError", true);
     163            return "redirect:/edit";
     164        }
     165        Movie movie = movieOptional.get();
     166
     167        List<Person> actorsList = new LinkedList<>();
     168        for(Integer id: actors){
     169            Optional<Person> person = personService.findActorById(id);
     170            if(person.isEmpty()){
     171                model.addAttribute("error", "The actor with ID {" + id + "} was not found.");
     172                model.addAttribute("hasError", true);
     173                return "redirect:/edit";
     174            }
     175            actorsList.add(person.get());
     176        }
     177
     178        List<Genre> genreList = new LinkedList<>();
     179        for(Integer id: genres){
     180            Optional<Genre> genre = genreService.findById(id);
     181            if(genre.isEmpty()){
     182                model.addAttribute("error", "The genre with ID {" + id + "} was not found.");
     183                model.addAttribute("hasError", true);
     184                return "redirect:/edit";
     185            }
     186            genreList.add(genre.get());
     187        }
     188
     189        Optional<Person> directorOp = personService.findDirectorById(director_id);
     190        if(directorOp.isEmpty()){
     191            model.addAttribute("error", "The director with ID {" + director_id + "} was not found.");
     192            model.addAttribute("hasError", true);
     193            return "redirect:/edit";
     194        }
     195
     196        Person director = directorOp.get();
     197
     198        movieService.deleteById(movie_id);
     199
     200        movie.setActors(actorsList);
     201        movie.setDirector(director);
     202        movie.setGenres(genreList);
     203        movie.setTitle(title);
     204        movie.setDescription(description);
     205        movie.setAiring_date(airing_date);
     206        movie.setImage_url(image_url);
     207        movie.setImdb_rating(rating);
     208
     209        movieService.save(movie);
     210
     211        return "redirect:/movies";
     212    }
     213
     214    @GetMapping("/{id}/edit")
     215    public String editMovie(@PathVariable Integer id, Model model){
     216        Movie movie = movieService.findById(id).orElseThrow(() -> new MovieIdNotFoundException(id));
     217        model.addAttribute("directors", personService.findAllDirectors());
     218        model.addAttribute("actors", personService.findAllActors());
     219        model.addAttribute("genres", genreService.findAll());
     220        model.addAttribute("movie", movie);
     221        model.addAttribute("contentTemplate", "moviesEdit");
     222        return "template";
     223    }
    36224}
Note: See TracChangeset for help on using the changeset viewer.