Spring Boot Contact Management App: Controller Logic

Contact Management App: Controller Logic

package ca.sheridancollege.controllers;

@Controller

HomeController

This class handles the requests.

@Autowired DatabaseAccess da; @Autowired UserDetailsServiceImpl userDetailsService;

@GetMapping("/")

goHome()

Navigates to the add contact page.

return "addContact.html";

@GetMapping("/addContact")

addContact()

Adds a new contact to the database.

@RequestParam(required = false) String name,
@RequestParam(required = false) int phoneNumber,
@RequestParam(required = false) String address,
@RequestParam(required = false) String email,
@RequestParam String role
Contact contact = new Contact(name, phoneNumber, address, email, role);
da.addContact(contact);
return "addContact.html";

@GetMapping("/show/delete/{id}")

deleteContact()

Deletes a contact by ID.

@PathVariable int id
da.deleteContactById(id);
return "redirect:/show";

@GetMapping("/show/edit/{id}")

editContact()

Prepares the contact for editing.

@PathVariable int id, Model model
Contact c = da.getContactById(id);
model.addAttribute("contact", c);
return "authorized/editContact.html";

@GetMapping("/modify")

editContactRecord()

Updates an existing contact record.

@RequestParam int id,
@RequestParam String name,
@RequestParam int phoneNumber,
@RequestParam String address,
@RequestParam String email,
@RequestParam String role
System.out.println("MODIFY METHOD::: " + id);
Contact c = new Contact(id, name, phoneNumber, address, email, role);
da.editContact(c);
return "redirect:/show";

@GetMapping("/show")

showContacts()

Displays all contacts based on user roles.

Model model
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
ArrayList<Long> roles = new ArrayList<Long>();
ArrayList<Contact> contacts = new ArrayList<Contact>();
roles = da.getRolesByUserName(auth.getName());
System.out.println("admin method  " + auth.getName());
System.out.println("roles    " + roles.get(0));
for (int i = 0; i < roles.size(); i++) {
  if (roles.get(i) == 1) {
    contacts.addAll(da.getMemberContacts());
  }
  if (roles.get(i) == 2) {
    contacts.addAll(da.getGuestContacts());
  }
  if (roles.get(i) == 3) {
    contacts.addAll(da.getAdminContacts());
  }
}
model.addAttribute("contact", contacts);
return "/authorized/showContacts.html";

@GetMapping("/login")

goLogin()

Navigates to the login page.

return "login.html";

@GetMapping("/access-denied")

goAccessDenied()

Navigates to the access denied error page.

return "/error/access-denied.html";

@GetMapping("/register")

goRegister()

Navigates to the registration page.

return "register.html";

@GetMapping("/registerUser")

registerUser()

Registers a new user.

@RequestParam String username,
@RequestParam String password,
@RequestParam(required = false) String admin,
@RequestParam(required = false) String guest,
@RequestParam(required = false) String member
String encryptedPassword = encryptPassword(password);
User user = new User(username, encryptedPassword);
da.registerUser(user);
if (admin != null) {
  da.registerUserRole(user, admin);
}
if (guest != null) {
  da.registerUserRole(user, guest);
}
if (member != null) {
  da.registerUserRole(user, member);
}
System.out.println("username: " + username);
System.out.println("password: " + password);
return "register.html";
encryptPassword()

Encrypts the password using BCrypt.

public static String encryptPassword(String password) {
  BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
  return encoder.encode(password);
}

@GetMapping("/viewContacts")

showStudents()

Retrieves contacts from an external REST API.

Model model, RestTemplate restTemplate
ResponseEntity<Contact[]> responseEntity = restTemplate.getForEntity(
  "http://localhost:8080/contactList",
  Contact[].class
);
Contact[] contacts = responseEntity.getBody();
model.addAttribute("contact", contacts);
return "showContacts.html";

@GetMapping(value = "/getContact/{id}", produces = "application/json") @ResponseBody

getContact()

Retrieves a single contact from an external REST API by ID.

@PathVariable int id, RestTemplate restTemplate
Map<String, Object> data = new HashMap<String, Object>();
ResponseEntity<Contact> responseEntity = restTemplate.getForEntity(
  "http://localhost:8080/contactList/" + id,
  Contact.class
);
data.put("contact", responseEntity.getBody());
return data;