package com.example.cookbook.controller; import com.example.cookbook.model.*; import com.example.cookbook.model.exception.ReceptNeEPronajdenException; import com.example.cookbook.service.*; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import java.sql.SQLException; import java.time.LocalDateTime; import java.util.List; @Controller public class HomeController { private final ReceptService receptService; private final SlikiService slikiService; private final SostojkiService sostojkiService; private final KomentariService komentariService; private final KorisniciService korisniciService; public HomeController(ReceptService receptService, SlikiService slikiService, SostojkiService sostojkiService, KomentariService komentariService, KorisniciService korisniciService) { this.receptService = receptService; this.slikiService = slikiService; this.sostojkiService = sostojkiService; this.komentariService = komentariService; this.korisniciService = korisniciService; } @GetMapping({"/", "/recepti"}) public String getHomePage(Model model){ List recepti = null; try { recepti = receptService.listAll(); } catch (SQLException e) { return "redirect:/error-page/SQL%20Exception"; } model.addAttribute("recepti", recepti); return "home"; } @GetMapping("/recept/{id}") public String getReceptPage(@PathVariable Long id, Model model){ Recept recept = null; List sliki; List sostojki; List komentari; List posetiteli; try { recept = receptService.findById(id); sliki = slikiService.findAllPicById(id); sostojki = sostojkiService.findAllById(id); komentari = komentariService.findAllById(id); posetiteli = korisniciService.findAllByRole(TipKorisnik.Posetitel); } catch (SQLException e) { return "redirect:/error-page/SQL%20Exception"; }catch (ReceptNeEPronajdenException e){ return "redirect:/error-page/" + e.getMessage(); } model.addAttribute("recept", recept); model.addAttribute("sliki", sliki); model.addAttribute("sostojki", sostojki); model.addAttribute("komentari", komentari); model.addAttribute("posetiteli", posetiteli); return "recept"; } @PostMapping("/komentar/{id}") public String processKomentar(@PathVariable Long id, @RequestParam Integer ocena, @RequestParam String komentar, @RequestParam String telefon){ if (id == null){ return "redirect:/error-page/Ne%20dodavanje%20komentar(Identifikatorot%20na%20receptot%20ne%20postoi)"; } try { komentariService.add(telefon, id, ocena, komentar); } catch (SQLException e) { return "redirect:/error-page/SQL%20Exception"; }catch (IllegalArgumentException e){ return "redirect:/error-page/Illegal%20Arguments"; } return "redirect:/recept/" + id; } @GetMapping("/error-page/{error}") public String getErrorPage(@PathVariable(required = false) String error, Model model){ if (error != null){ model.addAttribute("error", error); } return "error-page"; } }