Merge pull request #49 from lumijiez/testing_branch

Testing branch
This commit was merged in pull request #49.
This commit is contained in:
Dmitrii Cravcenco
2023-12-12 22:18:33 +02:00
committed by GitHub
3 changed files with 67 additions and 0 deletions

View File

@@ -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<AuthenticationResponse> updateUserData(@RequestBody UserUpdateDTO userUpdateDTO) {
return ResponseEntity.ok(userService.updateUser(userUpdateDTO));
}
@GetMapping("/get-user-data")
public ResponseEntity<Map<String, String>> getUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

View File

@@ -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;
}

View File

@@ -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> 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() {
return userRepository.findAll();
}