package com.moviefindercontrollers; import java.util.Base64; import javax.servlet.http.HttpSession; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartException; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.moviefindercontrollers.model.MovieFinderLoginUserPojo; import com.moviefindercontrollers.model.MovieFinderUser; import com.moviefindercontrollers.model.MovieFinderUserImp; import com.moviefindercontrollers.model.MovieFinderUserPojo; import com.moviefindercontrollers.service.ApiService; import com.moviefindercontrollers.service.MovieDetails; import com.moviefindercontrollers.service.MovieFinderService; @Controller public class MovieSearcherControllers { /// Dependencies @Autowired private MovieFinderService finderService; @Autowired MovieFinderUserImp finderUserImp; @Autowired private ApiService apiService; /// register page/// @GetMapping("/register") public String Login(Model model) { model.addAttribute("finderUserPojo", new MovieFinderUserPojo()); return "register"; } @PostMapping("/registration") public String registration(@Valid @ModelAttribute("finderUserPojo") MovieFinderUserPojo finderUserPojo, BindingResult bindingResult, HttpSession httpSession, Model model, @RequestParam("file") MultipartFile file) { if (bindingResult.hasErrors()) { System.out.println(bindingResult.getErrorCount()); return "register"; } try { String email = finderUserPojo.getEmail(); MovieFinderUser existingUser = finderUserImp.findByEmail(email); if (existingUser != null && existingUser.getPassword().equals(finderUserPojo.getPassword())) { return "registeredusers"; } MovieFinderUser finderUser = new MovieFinderUser(finderUserPojo.getName(), finderUserPojo.getEmail(), finderUserPojo.getPassword(), finderUserPojo.getFavouriteMovie(), finderUserPojo.getFavouriteGenre(), file.getBytes()); if (!file.isEmpty()) { httpSession.setAttribute("User", finderUser); finderService.addUser(finderUser); String base64EncodedImage = Base64.getEncoder().encodeToString(finderUser.getImage()); httpSession.setAttribute("image", base64EncodedImage); return "userregistered"; } else { return "register"; } } catch (Exception e) { e.printStackTrace(); return "register"; } } /// Login Page ///// @GetMapping("/login") public String loginPage(Model model, HttpSession session) { boolean registerFirst = session.getAttribute("registerFirst") != null; model.addAttribute("registerFirst", registerFirst); model.addAttribute("movieFinderLoginUserPojo", new MovieFinderLoginUserPojo()); return "login"; } @PostMapping("/loggedIn") public String loggedInUser( @Valid @ModelAttribute("movieFinderLoginUserPojo") MovieFinderLoginUserPojo movieFinderLoginUserPojo, BindingResult bindingResult, HttpSession httpSession, Model model) { if (bindingResult.hasErrors()) { System.out.println(bindingResult.getErrorCount()); return "login"; } try { String email = movieFinderLoginUserPojo.getEmail(); MovieFinderUser existingUser = finderUserImp.findByEmail(email); if (existingUser != null && existingUser.getPassword().equals(movieFinderLoginUserPojo.getPassword())) { httpSession.setAttribute("isLoggedIn", true); byte[] image = existingUser.getImage(); String base64EncodedImage = Base64.getEncoder().encodeToString(image); httpSession.setAttribute("image", base64EncodedImage); httpSession.setAttribute("email", email); System.out.println("The Email and Password is Correct "); return "redirect:/home"; // Redirecting to the home page } else { httpSession.setAttribute("registerFirst", true); return "login"; } } catch (EmptyResultDataAccessException e) { httpSession.setAttribute("registerFirst", true); e.getMessage(); return "login"; } } //// Home Page //// @GetMapping("/") public String HomePage(Model model, HttpSession session) { boolean isLoggedIn = session.getAttribute("isLoggedIn") != null ? true : false; model.addAttribute("isLoggedIn", isLoggedIn); return "home"; } @GetMapping("/home") public String HomePage2(Model model, HttpSession session) { boolean isLoggedIn = session.getAttribute("isLoggedIn") != null ? true : false; model.addAttribute("isLoggedIn", isLoggedIn); return "home"; } /// movie page ///// @GetMapping("/moviepage") public String MovieSearchPage() { return "moviesearch"; } /// Searching The Movie @PostMapping("/moviesearch") public String MovieSearchResult(@RequestParam("movieName") String movieName, Model model, HttpSession session) { try { MovieDetails movieDetails = apiService.fetchDataFromApi(movieName); System.out.println(movieDetails); if (movieDetails.getName() == "Null") { return "errorpage"; } model.addAttribute(movieDetails); session.setAttribute("movieDetails", movieDetails); } catch (Exception e) { return "errorpage"; } return "moviesearchresult"; } /// About page//// @GetMapping("/about") public String About(Model model, HttpSession httpSession) { boolean isLoggedIn = httpSession.getAttribute("isLoggedIn") != null ? true : false; model.addAttribute("isLoggedIn", isLoggedIn); return "about"; } /// Profile @GetMapping("/profile") public String profile(HttpSession session, Model model) { if (session.getAttribute("isLoggedIn") == null) { return "redirect:/login"; } String email = (String) session.getAttribute("email"); MovieFinderUser userInfo = finderUserImp.findByEmail(email); String image = (String) session.getAttribute("image"); session.setAttribute("image", image); session.setAttribute("userInfo", userInfo); model.addAttribute(userInfo); model.addAttribute("image", image); return "profile"; } }