Commit 23e10daf by Rubén Ramírez

feat: [RepositorioUsuario]: Creadas funciones para modificar los datos del usuario

parent 45f3ac01
......@@ -145,4 +145,56 @@ public class ServicioUsuarios {
return repositorioUsuario.findById(id).orElseThrow(UsuarioNoExiste::new);
}
public DTOLoginRespuesta modificarUsuario(String emailActual, String nuevoEmail, String nuevoNombreUsuario, String nuevaContrasenia, String contraseniaActual) {
Usuario usuario = repositorioUsuario.findByEmail(emailActual)
.orElseThrow(UsuarioNoExiste::new);
// Validación de contraseña actual
if (!passwordEncoder.matches(contraseniaActual, usuario.getContrasenia())) {
throw new IllegalArgumentException("La contraseña actual no es correcta");
}
// Validación de email si se cambia
if (!nuevoEmail.equalsIgnoreCase(usuario.getEmail())) {
Optional<Usuario> otro = repositorioUsuario.findByEmail(nuevoEmail);
if (otro.isPresent()) {
throw new UsuarioYaRegistrado();
}
}
// Validación de nombre de usuario si se cambia
if (!nuevoNombreUsuario.equalsIgnoreCase(usuario.getNombreUsuario())) {
Optional<Usuario> otro = repositorioUsuario.findByNombreUsuario(nuevoNombreUsuario);
if (otro.isPresent()) {
throw new NombreUsuarioYaCogido();
}
}
// Aplicar cambios
usuario.setEmail(nuevoEmail);
usuario.setNombreUsuario(nuevoNombreUsuario);
if (nuevaContrasenia != null && !nuevaContrasenia.isBlank()) {
usuario.setContrasenia(passwordEncoder.encode(nuevaContrasenia));
}
usuario = repositorioUsuario.actualizar(usuario);
// Generar nuevo token
String token = jwtUtil.generateToken(
usuario.getId(),
usuario.getEmail(),
usuario.getNombreUsuario(),
usuario.getRol()
);
return new DTOLoginRespuesta(token, usuario.getEmail(), usuario.getNombreUsuario());
}
public DTOLoginRespuesta modificarUsuarioDesdeToken(String token, String nuevoEmail, String nuevoNombreUsuario, String nuevaContrasenia, String contraseniaActual) {
String emailActual = jwtUtil.extractUsername(token.replace("Bearer ", ""));
return modificarUsuario(emailActual, nuevoEmail, nuevoNombreUsuario, nuevaContrasenia, contraseniaActual);
}
}
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