Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.telerikacademy.web.forum.controllers.mvc;
- import com.telerikacademy.web.forum.exceptions.AuthenticationFailureException;
- import com.telerikacademy.web.forum.exceptions.DuplicateEntityException;
- import com.telerikacademy.web.forum.exceptions.EntityNotFoundException;
- import com.telerikacademy.web.forum.exceptions.UnauthorizedOperationException;
- import com.telerikacademy.web.forum.models.User;
- import com.telerikacademy.web.forum.models.dto.UserDTO;
- import com.telerikacademy.web.forum.models.dto.UserOutDTO;
- import com.telerikacademy.web.forum.services.contracts.UserService;
- import com.telerikacademy.web.forum.utils.helper.AuthenticationHelper;
- import com.telerikacademy.web.forum.utils.mapper.UserMapper;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.validation.BindingResult;
- import org.springframework.web.bind.annotation.*;
- import javax.servlet.http.HttpSession;
- import javax.validation.Valid;
- import java.util.Optional;
- @Controller
- @RequestMapping("/users")
- public class UserMvcController {
- private final UserService userService;
- private final AuthenticationHelper authenticationHelper;
- private final UserMapper userMapper;
- public UserMvcController(UserService userService,
- AuthenticationHelper authenticationHelper,
- UserMapper userMapper) {
- this.userService = userService;
- this.authenticationHelper = authenticationHelper;
- this.userMapper = userMapper;
- }
- @ModelAttribute("isAuthenticated")
- public boolean populateIsAuthenticated(HttpSession session) {
- return session.getAttribute("currentUser") != null;
- }
- @ModelAttribute("userId")
- public int getUserId(HttpSession session) {
- int userId = 0;
- if (populateIsAuthenticated(session)) userId = authenticationHelper.tryGetUser(session).getUserId();
- return userId;
- }
- @GetMapping
- public String showAllUsers(
- @RequestParam(required = false) Optional<String> search, Model model, HttpSession session) {
- try {
- User user = authenticationHelper.tryGetUser(session);
- model.addAttribute("users", userService.search(search, user));
- return "users";
- } catch (AuthenticationFailureException e) {
- return "redirect:/auth/login";
- }
- }
- @GetMapping("/{userId}")
- public String getById(@PathVariable int userId, Model model, HttpSession session) {
- try {
- User user = authenticationHelper.tryGetUser(session);
- model.addAttribute("user", userService.getById(user, userId));
- return "user";
- } catch (AuthenticationFailureException e) {
- return "redirect:/auth/login";
- } catch (UnauthorizedOperationException e) {
- return "access-denied";
- }
- }
- @GetMapping("/{userId}/update")
- public String showEditUserPage(@PathVariable int userId, Model model, HttpSession session) {
- try {
- authenticationHelper.tryGetUser(session);
- } catch (AuthenticationFailureException e) {
- return "redirect:/auth/login";
- }
- try {
- User editor = userService.getById(userId);
- UserOutDTO userOutDTO = userMapper.userToUserOutDto(editor);
- model.addAttribute("user", userOutDTO);
- return "user-update";
- } catch (EntityNotFoundException e) {
- model.addAttribute("error", e.getMessage());
- return "not-found";
- }
- }
- @PostMapping("/{userId}/update")
- public String updateUser(@PathVariable int userId,
- @Valid @ModelAttribute("user") UserDTO userDTO,
- BindingResult errors,
- HttpSession session) {
- User loggedInUser;
- try {
- loggedInUser = authenticationHelper.tryGetUser(session);
- } catch (AuthenticationFailureException e) {
- return "redirect:/auth/login";
- }
- if (errors.hasErrors()) {
- return "user-update";
- }
- try {
- User userToBeUpdated = userMapper.userDtoToUserUpdate(userDTO, userId);
- userService.update(loggedInUser, userToBeUpdated);
- return "redirect:/users/{userId}";
- } catch (DuplicateEntityException e) {
- errors.rejectValue("username", "username_email_error", e.getMessage());
- return "/user-update";
- } catch (UnauthorizedOperationException e) {
- errors.rejectValue("userType", "usertype_role", e.getMessage());
- return "/user-update";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment