feat(user): implementado changePassword en el repositorio, servicio y controlador de UpdateUser

parent 63c24fab
......@@ -6,6 +6,8 @@ public interface UpdateUserUseCase {
User updateById(String id, User inputUser);
boolean changePassword(String id, String oldPassword, String newPassword);
void deactivateById(String id);
void activateById(String id);
......
......@@ -25,6 +25,11 @@ public class UpdateUserUseCaseImpl implements UpdateUserUseCase {
}
@Override
public boolean changePassword(String id, String oldPassword, String newPassword) {
return updateUserRepository.changePassword(id, oldPassword, newPassword);
}
@Override
public void deactivateById(String id) {
updateUserRepository.deactivateById(id);
}
......
......@@ -6,6 +6,8 @@ public interface UpdateUserRepository {
UserDocument updateById(String id, UserDocument userDocument);
boolean changePassword(String id, String oldPassword, String newPassword);
void deactivateById(String id);
void activateById(String id);
......
......@@ -2,12 +2,14 @@ package com.example.apprecetas.user.infrastructure.controller;
import com.example.apprecetas.exception.UnprocessableEntityException;
import com.example.apprecetas.user.application.UpdateUserUseCase;
import com.example.apprecetas.user.infrastructure.controller.dto.UserInputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.UserOutputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.input.UserInputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.input.UserUpdateInputDto;
import com.example.apprecetas.user.infrastructure.controller.dto.output.UserOutputDto;
import com.example.apprecetas.user.infrastructure.mapper.UserMapper;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.validation.BindingResult;
......@@ -25,7 +27,7 @@ public class UpdateUserController {
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@PutMapping
public ResponseEntity<UserOutputDto> update(@Valid @RequestBody UserInputDto userInputDto, BindingResult result) {
public ResponseEntity<UserOutputDto> update(@Valid @RequestBody UserUpdateInputDto userInputDto, BindingResult result) {
if (result.hasErrors()) {
String errorMsg = result.getFieldErrors().stream()
.map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage())
......@@ -36,6 +38,17 @@ public class UpdateUserController {
return ResponseEntity.ok().body(mapper.map(service.updateById(userId, mapper.map(userInputDto))));
}
@PatchMapping("/password")
public ResponseEntity<String> changePassword(@RequestParam String oldPassword, @RequestParam String newPassword) {
String userId = SecurityContextHolder.getContext().getAuthentication().getName();
boolean response = service.changePassword(userId, oldPassword, newPassword);
if (response)
return ResponseEntity.ok().body("Contraseña modificada correctamente");
return ResponseEntity.status(HttpStatus.CONFLICT).body("Contraseña incorrecta");
}
@PatchMapping("/deactivate")
public ResponseEntity<String> deactivateMe() {
String userId = SecurityContextHolder.getContext().getAuthentication().getName();
......
......@@ -25,15 +25,25 @@ public class UpdateUserRepositoryImpl implements UpdateUserRepository {
user.setName(userDocument.getName());
user.setSurname(userDocument.getSurname());
user.setEmail(userDocument.getEmail());
if (userDocument.getPassword() != null)
user.setPassword(passwordEncoder.encode(userDocument.getPassword()));
return userRepository.save(user);
}
@Override
public boolean changePassword(String id, String oldPassword, String newPassword) {
UserDocument user = userRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
// Si las contraseñas no coinciden
if (!passwordEncoder.matches(oldPassword, user.getPassword())) {
return false;
}
user.setPassword(passwordEncoder.encode(newPassword));
userRepository.save(user);
return true;
}
@Override
public void deactivateById(String id) {
UserDocument userDocument = userRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Usuario con id " + id + " no encontrado"));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment