aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/berzerkula/builddb/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/berzerkula/builddb/controllers')
-rw-r--r--src/main/java/org/berzerkula/builddb/controllers/AccountController.java141
-rw-r--r--src/main/java/org/berzerkula/builddb/controllers/DashboardController.java27
-rw-r--r--src/main/java/org/berzerkula/builddb/controllers/HomeController.java47
-rw-r--r--src/main/java/org/berzerkula/builddb/controllers/PkgController.java169
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/";
+ }
+}