Add user data update possibility
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
package com.faf223.expensetrackerfaf.controller;
|
package com.faf223.expensetrackerfaf.controller;
|
||||||
|
|
||||||
|
import com.faf223.expensetrackerfaf.controller.auth.AuthenticationResponse;
|
||||||
import com.faf223.expensetrackerfaf.controller.auth.ChangePasswordRequest;
|
import com.faf223.expensetrackerfaf.controller.auth.ChangePasswordRequest;
|
||||||
import com.faf223.expensetrackerfaf.dto.UserCreationDTO;
|
import com.faf223.expensetrackerfaf.dto.UserCreationDTO;
|
||||||
import com.faf223.expensetrackerfaf.dto.UserDTO;
|
import com.faf223.expensetrackerfaf.dto.UserDTO;
|
||||||
|
import com.faf223.expensetrackerfaf.dto.UserUpdateDTO;
|
||||||
import com.faf223.expensetrackerfaf.dto.mappers.UserMapper;
|
import com.faf223.expensetrackerfaf.dto.mappers.UserMapper;
|
||||||
import com.faf223.expensetrackerfaf.model.Credential;
|
import com.faf223.expensetrackerfaf.model.Credential;
|
||||||
import com.faf223.expensetrackerfaf.model.User;
|
import com.faf223.expensetrackerfaf.model.User;
|
||||||
@@ -63,6 +65,12 @@ public class UserController {
|
|||||||
return ResponseEntity.status(HttpStatus.OK).build();
|
return ResponseEntity.status(HttpStatus.OK).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PatchMapping("/update-user-data")
|
||||||
|
public ResponseEntity<AuthenticationResponse> updateUserData(@RequestBody UserUpdateDTO userUpdateDTO) {
|
||||||
|
|
||||||
|
return ResponseEntity.ok(userService.updateUser(userUpdateDTO));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/get-user-data")
|
@GetMapping("/get-user-data")
|
||||||
public ResponseEntity<Map<String, String>> getUser() {
|
public ResponseEntity<Map<String, String>> getUser() {
|
||||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -1,12 +1,20 @@
|
|||||||
package com.faf223.expensetrackerfaf.service;
|
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.Credential;
|
||||||
import com.faf223.expensetrackerfaf.model.Role;
|
import com.faf223.expensetrackerfaf.model.Role;
|
||||||
import com.faf223.expensetrackerfaf.model.User;
|
import com.faf223.expensetrackerfaf.model.User;
|
||||||
import com.faf223.expensetrackerfaf.repository.CredentialRepository;
|
import com.faf223.expensetrackerfaf.repository.CredentialRepository;
|
||||||
import com.faf223.expensetrackerfaf.repository.UserRepository;
|
import com.faf223.expensetrackerfaf.repository.UserRepository;
|
||||||
|
import com.faf223.expensetrackerfaf.security.PersonDetails;
|
||||||
|
import com.faf223.expensetrackerfaf.util.exceptions.UserNotFoundException;
|
||||||
import jakarta.transaction.Transactional;
|
import jakarta.transaction.Transactional;
|
||||||
import lombok.RequiredArgsConstructor;
|
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 org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -18,11 +26,48 @@ public class UserService {
|
|||||||
|
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
private final CredentialRepository credentialRepository;
|
private final CredentialRepository credentialRepository;
|
||||||
|
private final JwtService jwtService;
|
||||||
|
|
||||||
public void updateUser(User user) {
|
public void updateUser(User user) {
|
||||||
userRepository.save(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> 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<User> getUsers() {
|
public List<User> getUsers() {
|
||||||
return userRepository.findAll();
|
return userRepository.findAll();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user