diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java index 4886484..b585a1d 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java @@ -1,8 +1,10 @@ package com.faf223.expensetrackerfaf.controller; +import com.faf223.expensetrackerfaf.controller.auth.AuthenticationResponse; import com.faf223.expensetrackerfaf.controller.auth.ChangePasswordRequest; import com.faf223.expensetrackerfaf.dto.UserCreationDTO; import com.faf223.expensetrackerfaf.dto.UserDTO; +import com.faf223.expensetrackerfaf.dto.UserUpdateDTO; import com.faf223.expensetrackerfaf.dto.mappers.UserMapper; import com.faf223.expensetrackerfaf.model.Credential; import com.faf223.expensetrackerfaf.model.User; @@ -63,6 +65,12 @@ public class UserController { return ResponseEntity.status(HttpStatus.OK).build(); } + @PatchMapping("/update-user-data") + public ResponseEntity updateUserData(@RequestBody UserUpdateDTO userUpdateDTO) { + + return ResponseEntity.ok(userService.updateUser(userUpdateDTO)); + } + @GetMapping("/get-user-data") public ResponseEntity> getUser() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/UserUpdateDTO.java b/src/main/java/com/faf223/expensetrackerfaf/dto/UserUpdateDTO.java new file mode 100644 index 0000000..6f08ad1 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/UserUpdateDTO.java @@ -0,0 +1,14 @@ +package com.faf223.expensetrackerfaf.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class UserUpdateDTO { + + private String firstname; + private String lastname; + private String username; + private String email; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/UserService.java b/src/main/java/com/faf223/expensetrackerfaf/service/UserService.java index fe3c559..78e4e28 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/UserService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/UserService.java @@ -1,12 +1,20 @@ package com.faf223.expensetrackerfaf.service; +import com.faf223.expensetrackerfaf.config.JwtService; +import com.faf223.expensetrackerfaf.controller.auth.AuthenticationResponse; +import com.faf223.expensetrackerfaf.dto.UserUpdateDTO; import com.faf223.expensetrackerfaf.model.Credential; import com.faf223.expensetrackerfaf.model.Role; import com.faf223.expensetrackerfaf.model.User; import com.faf223.expensetrackerfaf.repository.CredentialRepository; import com.faf223.expensetrackerfaf.repository.UserRepository; +import com.faf223.expensetrackerfaf.security.PersonDetails; +import com.faf223.expensetrackerfaf.util.exceptions.UserNotFoundException; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; import java.util.List; @@ -18,11 +26,48 @@ public class UserService { private final UserRepository userRepository; private final CredentialRepository credentialRepository; + private final JwtService jwtService; public void updateUser(User user) { userRepository.save(user); } + public AuthenticationResponse updateUser(UserUpdateDTO userUpdate) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication != null && authentication.getPrincipal() instanceof UserDetails userDetails) { + User user = getUserByEmail(userDetails.getUsername()); + Optional credential = credentialRepository.findByUser(user); + + if (credential.isPresent()) { + + Credential credentialToUpdate = credential.get(); + + if (userUpdate.getUsername() != null) + user.setUsername(userUpdate.getUsername()); + if (userUpdate.getFirstname() != null) + user.setFirstName(userUpdate.getFirstname()); + if (userUpdate.getLastname() != null) + user.setLastName(userUpdate.getLastname()); + if (userUpdate.getEmail() != null) + credentialToUpdate.setEmail(userUpdate.getEmail()); + + userRepository.save(user); + credentialRepository.save(credentialToUpdate); + + UserDetails details = new PersonDetails(credentialToUpdate); + String jwtToken = jwtService.generateToken(details); + String refreshToken = jwtService.generateRefreshToken(details); + + return AuthenticationResponse.builder() + .accessToken(jwtToken) + .refreshToken(refreshToken) + .build(); + } + } + throw new UserNotFoundException("User not found!"); + } + public List getUsers() { return userRepository.findAll(); }