Commit e15ce02d by Rubén Ramírez

fix: [RegistraUsuarios]: Corregido el código para registrar un usuario para…

fix: [RegistraUsuarios]: Corregido el código para registrar un usuario para distinguir distintos mensajes para el frontend
parent 02bf53ab
package com.ujaen.tfg.mangaffinity.excepciones;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(UsuarioYaRegistrado.class)
public ResponseEntity<String> handleUsuarioYaRegistrado(UsuarioYaRegistrado ex) {
logger.warn("GlobalExceptionHandler capturó UsuarioYaRegistrado: {}", ex.getMessage());
return ResponseEntity.status(HttpStatus.CONFLICT)
.contentType(org.springframework.http.MediaType.TEXT_PLAIN)
.body("correo");
}
@ExceptionHandler(NombreUsuarioYaRegistrado.class)
public ResponseEntity<String> handleNombreUsuarioYaRegistrado(NombreUsuarioYaRegistrado ex) {
logger.warn("GlobalExceptionHandler capturó NombreUsuarioYaRegistrado: {}", ex.getMessage());
return ResponseEntity.status(HttpStatus.CONFLICT)
.contentType(org.springframework.http.MediaType.TEXT_PLAIN)
.body("nombre de usuario");
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleGenericException(Exception ex) {
logger.error("Excepción no controlada en GlobalExceptionHandler: {}", ex.getMessage(), ex);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.contentType(org.springframework.http.MediaType.TEXT_PLAIN)
.body("Error inesperado.");
}
}
package com.ujaen.tfg.mangaffinity.excepciones;
public class NombreUsuarioYaRegistrado extends RuntimeException {
public NombreUsuarioYaRegistrado() {
super("El nombre de usuario ya está en uso.");
}
}
package com.ujaen.tfg.mangaffinity.excepciones;
public class UsuarioYaRegistrado extends RuntimeException {
public UsuarioYaRegistrado() {
super("El correo electrónico ya está registrado.");
}
}
......@@ -58,6 +58,20 @@ public class RepositorioUsuario {
Usuario usuario = em.find(Usuario.class, id);
return Optional.ofNullable(usuario);
}
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public boolean existePorEmail(String email) {
return !em.createQuery("SELECT u FROM Usuario u WHERE u.email = :email", Usuario.class)
.setParameter("email", email)
.getResultList()
.isEmpty();
}
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public boolean existePorNombreUsuario(String nombreUsuario) {
return !em.createQuery("SELECT u FROM Usuario u WHERE u.nombreUsuario = :nombreUsuario", Usuario.class)
.setParameter("nombreUsuario", nombreUsuario)
.getResultList()
.isEmpty();
}
}
......@@ -2,6 +2,7 @@ package com.ujaen.tfg.mangaffinity.rest;
import com.ujaen.tfg.mangaffinity.entidades.BibliotecaPersonal;
import com.ujaen.tfg.mangaffinity.entidades.Usuario;
import com.ujaen.tfg.mangaffinity.excepciones.NombreUsuarioYaRegistrado;
import com.ujaen.tfg.mangaffinity.excepciones.UsuarioNoExiste;
import com.ujaen.tfg.mangaffinity.excepciones.UsuarioYaRegistrado;
import com.ujaen.tfg.mangaffinity.rest.DTO.DTOBibliotecaPersonal;
......@@ -34,16 +35,21 @@ public class UsuariosController {
public void mapeadoExcepcionConstraintViolationException() {}
@PostMapping("/")
public ResponseEntity<DTOUsuario> registrarUsuario(@RequestBody DTOUsuario dtoUsuario) {
public ResponseEntity<String> registrarUsuario(@RequestBody DTOUsuario dtoUsuario) {
try {
Usuario usuario = mapper.entity(dtoUsuario);
servicioUsuarios.crearUsuario(usuario);
return ResponseEntity.status(HttpStatus.CREATED).build();
} catch (UsuarioYaRegistrado e) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
return ResponseEntity.status(HttpStatus.CONFLICT).body("correo");
} catch (NombreUsuarioYaRegistrado e) {
return ResponseEntity.status(HttpStatus.CONFLICT).body("nombre de usuario");
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error inesperado");
}
}
@PostMapping("/{email}")
public ResponseEntity<?> iniciarSesion(@PathVariable String email, @RequestBody Map<String, String> clave) {
try {
......
......@@ -2,6 +2,7 @@ package com.ujaen.tfg.mangaffinity.servicios;
import com.ujaen.tfg.mangaffinity.entidades.BibliotecaPersonal;
import com.ujaen.tfg.mangaffinity.entidades.Usuario;
import com.ujaen.tfg.mangaffinity.excepciones.NombreUsuarioYaRegistrado;
import com.ujaen.tfg.mangaffinity.excepciones.UsuarioNoExiste;
import com.ujaen.tfg.mangaffinity.excepciones.UsuarioYaRegistrado;
import com.ujaen.tfg.mangaffinity.repositorios.RepositorioUsuario;
......@@ -18,7 +19,8 @@ import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Service
public class ServicioUsuarios {
@Autowired
......@@ -57,17 +59,33 @@ public class ServicioUsuarios {
* Función para crear un Socio en la estructura
* @param usuario usuario que se va a añadir
*/
private static final Logger logger = LoggerFactory.getLogger(ServicioUsuarios.class);
public void crearUsuario(@Valid Usuario usuario) {
usuario.setContrasenia(passwordEncoder.encode(usuario.getContrasenia()));
if (usuario.getEmail().equalsIgnoreCase(admin.getEmail())) {
throw new UsuarioYaRegistrado(); // Evita que se cree otro admin accidentalmente
logger.warn("Intento de registro con correo del admin.");
throw new UsuarioYaRegistrado();
}
if (repositorioUsuario.existePorEmail(usuario.getEmail())) {
logger.warn("Intento de registro con un correo ya registrado: " + usuario.getEmail());
throw new UsuarioYaRegistrado();
}
if (repositorioUsuario.existePorNombreUsuario(usuario.getNombreUsuario())) {
logger.warn("Intento de registro con un nombre de usuario ya registrado: " + usuario.getNombreUsuario());
throw new NombreUsuarioYaRegistrado();
}
usuario.setBibliotecaPersonal(new BibliotecaPersonal(usuario));
usuario.getBibliotecaPersonal().setUsuario(usuario); // Asegurar relación bidireccional
usuario.getBibliotecaPersonal().setUsuario(usuario);
repositorioUsuario.guardar(usuario);
}
/**
* Autentica a un usuario y genera un token JWT si las credenciales son correctas.
* @param email Email del usuario
......
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