diff options
Diffstat (limited to 'src/main/java/org/berzerkula/builddb/controllers')
4 files changed, 384 insertions, 0 deletions
diff --git a/src/main/java/org/berzerkula/builddb/controllers/AccountController.java b/src/main/java/org/berzerkula/builddb/controllers/AccountController.java new file mode 100644 index 0000000..6cec175 --- /dev/null +++ b/src/main/java/org/berzerkula/builddb/controllers/AccountController.java @@ -0,0 +1,141 @@ +package org.berzerkula.builddb.controllers; + +import java.util.Date; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; + +import org.berzerkula.builddb.models.AppUser; +import org.berzerkula.builddb.models.RegisterDto; +import org.berzerkula.builddb.repositories.AppUserRepository; + +import jakarta.validation.Valid; + +@Controller +public class AccountController { + + @Autowired + private AppUserRepository repo; + + @GetMapping("/profile") + public String profile(Authentication auth, Model model) { + AppUser user = repo.findByEmail(auth.getName()); + model.addAttribute("appUser", user); + + return "profile"; + } + + @GetMapping("/login") + public String login() { + return "login"; + } + + @GetMapping("/register") + public String register(Model model) { + RegisterDto registerDto = new RegisterDto(); + model.addAttribute(registerDto); + model.addAttribute("success", false); + return "register"; + } + + @PostMapping("/register") + public String register( + Model model, + @Valid @ModelAttribute RegisterDto registerDto, + BindingResult result + ) { + + if (!registerDto.getPassword().equals(registerDto.getConfirmPassword())) { + result.addError( + new FieldError("registerDto", "confirmPassword" + , "Password and Confirm Password do not match") + ); + } + + + AppUser appUser = repo.findByEmail(registerDto.getEmail()); + if (appUser != null) { + result.addError( + new FieldError("registerDto", "email" + , "Email address is already used") + ); + } + + + if (result.hasErrors()) { + return "register"; + } + + + try { + // create new account + var bCryptEncoder = new BCryptPasswordEncoder(); + + + AppUser newUser = new AppUser(); + newUser.setFirstName(registerDto.getFirstName()); + newUser.setLastName(registerDto.getLastName()); + newUser.setEmail(registerDto.getEmail()); + newUser.setPhone(registerDto.getPhone()); + newUser.setAddress(registerDto.getAddress()); + newUser.setRole("client"); + newUser.setCreatedAt(new Date()); + newUser.setPassword(bCryptEncoder.encode(registerDto.getPassword())); + + repo.save(newUser); + + + model.addAttribute("registerDto", new RegisterDto()); + model.addAttribute("success", true); + } + catch(Exception ex) { + result.addError( + new FieldError("registerDto", "firstName" + , ex.getMessage()) + ); + } + + return "register"; + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/berzerkula/builddb/controllers/DashboardController.java b/src/main/java/org/berzerkula/builddb/controllers/DashboardController.java new file mode 100644 index 0000000..e928312 --- /dev/null +++ b/src/main/java/org/berzerkula/builddb/controllers/DashboardController.java @@ -0,0 +1,27 @@ +package org.berzerkula.builddb.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class DashboardController { + + @GetMapping("/user") + public String userDashboard() { + return "user"; + } + + @GetMapping("/client") + public String clientDashboard() { + return "client"; + } + + @GetMapping("/admin") + public String adminDashboard() { + return "admin"; + } + + @GetMapping("/actuatorDashboard") + public String actuatorDashboard() { return "actuatorDashboard"; } + +} diff --git a/src/main/java/org/berzerkula/builddb/controllers/HomeController.java b/src/main/java/org/berzerkula/builddb/controllers/HomeController.java new file mode 100644 index 0000000..ad171c8 --- /dev/null +++ b/src/main/java/org/berzerkula/builddb/controllers/HomeController.java @@ -0,0 +1,47 @@ +package org.berzerkula.builddb.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class HomeController { + + @GetMapping("/contact") + public String contact() { + return "contact"; + } + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/berzerkula/builddb/controllers/PkgController.java b/src/main/java/org/berzerkula/builddb/controllers/PkgController.java new file mode 100644 index 0000000..404a58b --- /dev/null +++ b/src/main/java/org/berzerkula/builddb/controllers/PkgController.java @@ -0,0 +1,169 @@ +package org.berzerkula.builddb.controllers; + + +import jakarta.persistence.OrderBy; +import jakarta.validation.Valid; +import org.berzerkula.builddb.models.Pkg; +import org.berzerkula.builddb.models.PkgDto; +import org.berzerkula.builddb.repositories.PkgRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +@Controller +@RequestMapping("/pkgs") +public class PkgController { + + private static final Logger logger = LoggerFactory.getLogger(PkgController.class); + + @Autowired + private PkgRepository repo; + + @GetMapping({"", "/", "/index"}) + public String showPkgList(Model model, + @RequestParam(defaultValue = "sequence,asc") String[] sort, + @RequestParam(defaultValue = "") String repotable) { + try { + String sortField = sort[0]; + String sortDirection = sort[1]; + + Sort.Direction direction = sortDirection.equals("desc") ? Sort.Direction.DESC : Sort.Direction.ASC; + Sort.Order order = new Sort.Order(direction, sortField); + + List<Pkg> pkgs = repo.findAll(Sort.by(order)); + + model.addAttribute("pkgs", pkgs); + model.addAttribute("sortField", sortField); + model.addAttribute("sortDirection", sortDirection); + model.addAttribute("reverseSortDirection", sortDirection.equals("asc") ? "desc" : "asc"); + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return "pkgs/index"; + } + + @GetMapping("/add") + public String showAddPkgForm(Model model) { + PkgDto pkgDto = new PkgDto(); + model.addAttribute("pkgDto", pkgDto); + return "pkgs/add"; + } + + @PostMapping("/add") + public String addPkg( + @Valid + @ModelAttribute + PkgDto pkgDto, BindingResult result ) { + + if (result.hasErrors()) { + return "pkgs/add"; + } + + try { + + Pkg pkg = new Pkg(); + pkg.setSequence(pkgDto.getSequence()); + pkg.setName(pkgDto.getName()); + pkg.setVersion(pkgDto.getVersion()); + pkg.setConfigure(pkgDto.getConfigure()); + pkg.setBuild(pkgDto.getBuild()); + pkg.setInstall(pkgDto.getInstall()); + pkg.setSetup(pkgDto.getSetup()); + pkg.setNotes(pkgDto.getNotes()); + pkg.setUrl(pkgDto.getUrl()); + + repo.save(pkg); + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return "redirect:/pkgs"; + } + + @GetMapping("/edit") + public String showEditPkgForm(Model model, @RequestParam int id) { + + try { + Pkg pkg = repo.findById(id).get(); + model.addAttribute("pkg", pkg); + + PkgDto pkgDto = new PkgDto(); + pkgDto.setSequence(pkg.getSequence()); + pkgDto.setName(pkg.getName()); + pkgDto.setVersion(pkg.getVersion()); + pkgDto.setConfigure(pkg.getConfigure()); + pkgDto.setBuild(pkg.getBuild()); + pkgDto.setInstall(pkg.getInstall()); + pkgDto.setSetup(pkg.getSetup()); + pkgDto.setNotes(pkg.getNotes()); + pkgDto.setUrl(pkg.getUrl()); + + model.addAttribute("pkgDto", pkgDto); + + } catch(Exception ex) { + logger.error("Exception: {}", ex.getMessage()); + } + + return "pkgs/edit"; + } + + @PostMapping("/edit") + public String editPkg( + Model model, + @RequestParam int id, + @Valid + @ModelAttribute PkgDto pkgDto, BindingResult result ) { + + try { + Pkg pkg = repo.findById(id).get(); + model.addAttribute("pkg", pkg); + + if (result.hasErrors()) { + return "pkgs/edit"; + } + + pkg.setSequence(pkgDto.getSequence()); + pkg.setName(pkgDto.getName()); + pkg.setVersion(pkgDto.getVersion()); + pkg.setConfigure(pkgDto.getConfigure()); + pkg.setBuild(pkgDto.getBuild()); + pkg.setInstall(pkgDto.getInstall()); + pkg.setSetup(pkgDto.getSetup()); + pkg.setNotes(pkgDto.getNotes()); + pkg.setUrl(pkgDto.getUrl()); + + repo.save(pkg); + + } catch(Exception ex) { + logger.error("Exception: {}", ex.getMessage()); + } + return "redirect:/pkgs/#" + id; + + } + + @GetMapping("/delete") + public String deletePkg(@RequestParam int id) { + + try { + Pkg pkg = repo.findById(id).get(); + + repo.delete(pkg); + + } catch (Exception ex) { + logger.error("Exception: {}", ex.getMessage()); + } + + return "redirect:/pkgs/"; + } +} |