Changes by Álvaro Ordoñez colabora en el anterior commit

parent d5830780
...@@ -43,7 +43,9 @@ public class Reserva { ...@@ -43,7 +43,9 @@ public class Reserva {
@Transient @Transient
SistemaCarPooling sistema; SistemaCarPooling sistema;
public Reserva(){} public Reserva(){
this.pasajeros = new ArrayList<String>();
}
public Reserva(Usuario conductor, String origen, String destino, Date fechaSalida, int nAsientos, int precioAsiento) { public Reserva(Usuario conductor, String origen, String destino, Date fechaSalida, int nAsientos, int precioAsiento) {
this.conductor = conductor; this.conductor = conductor;
this.idReserva = ++incrementaReserva; this.idReserva = ++incrementaReserva;
...@@ -148,4 +150,6 @@ public class Reserva { ...@@ -148,4 +150,6 @@ public class Reserva {
public boolean getReservaConcluida(){return this.reservaConcluida;} public boolean getReservaConcluida(){return this.reservaConcluida;}
public void setReservaConcluida(boolean reservaConcluida) { this.reservaConcluida = reservaConcluida; } public void setReservaConcluida(boolean reservaConcluida) { this.reservaConcluida = reservaConcluida; }
} }
...@@ -56,7 +56,7 @@ public class Usuario { ...@@ -56,7 +56,7 @@ public class Usuario {
private String claveAcceso; private String claveAcceso;
@Transient @Transient
private ArrayList<Integer> puntuacion; private ArrayList<Double> puntuacion;
@NotNull @NotNull
private Rol rol; private Rol rol;
...@@ -157,11 +157,11 @@ public class Usuario { ...@@ -157,11 +157,11 @@ public class Usuario {
this.claveAcceso = claveAcceso; this.claveAcceso = claveAcceso;
} }
public ArrayList<Integer> getPuntuacion() { public ArrayList<Double> getPuntuacion() {
return puntuacion; return puntuacion;
} }
public void setPuntuacion(int puntuacion) { public void setPuntuacion(double puntuacion) {
this.puntuacion.add(puntuacion); this.puntuacion.add(puntuacion);
} }
......
...@@ -50,7 +50,7 @@ public class UsuarioRepository { ...@@ -50,7 +50,7 @@ public class UsuarioRepository {
usuario.ofrecerViaje(viaje.getOrigen(), viaje.getDestino(), viaje.getFechaSalida(), viaje.getnAsientos(), viaje.getPrecioAsiento()); usuario.ofrecerViaje(viaje.getOrigen(), viaje.getDestino(), viaje.getFechaSalida(), viaje.getnAsientos(), viaje.getPrecioAsiento());
} }
public void actualizarPuntuacion(Usuario usuario, int nuevaPuntuacion) { public void actualizarPuntuacion(Usuario usuario, double nuevaPuntuacion) {
// Carga el usuario desde la base de datos // Carga el usuario desde la base de datos
Usuario usuarioExistente = em.find(Usuario.class, usuario.getDNI()); Usuario usuarioExistente = em.find(Usuario.class, usuario.getDNI());
...@@ -59,8 +59,8 @@ public class UsuarioRepository { ...@@ -59,8 +59,8 @@ public class UsuarioRepository {
usuarioExistente.getPuntuacion().add(nuevaPuntuacion); usuarioExistente.getPuntuacion().add(nuevaPuntuacion);
// Calcula la puntuación media // Calcula la puntuación media
List<Integer> puntuaciones = usuarioExistente.getPuntuacion(); List<Double> puntuaciones = usuarioExistente.getPuntuacion();
double puntuacionMedia = puntuaciones.stream().mapToInt(Integer::intValue).average().orElse(0.0); double puntuacionMedia = puntuaciones.stream().mapToInt(Double::intValue).average().orElse(0.0);
usuarioExistente.setPuntuacionMedia(puntuacionMedia); usuarioExistente.setPuntuacionMedia(puntuacionMedia);
// Guarda el usuario actualizado (sin duplicar) // Guarda el usuario actualizado (sin duplicar)
...@@ -73,6 +73,14 @@ public class UsuarioRepository { ...@@ -73,6 +73,14 @@ public class UsuarioRepository {
em.merge(u); em.merge(u);
} }
@CacheEvict(value = "usuarios", key = "#DNI")
public void eliminarUsuarioPorDNI(String DNI) {
Usuario usuario = em.find(Usuario.class, DNI);
if (usuario != null) {
em.remove(usuario);
}
}
......
...@@ -47,7 +47,7 @@ public class ServicioCarPooling { ...@@ -47,7 +47,7 @@ public class ServicioCarPooling {
//AltaViaje??? //AltaViaje???
//Cacheable //Cacheable
@Transactional
public Usuario altaCliente(@NotNull @Valid Usuario usuario) { public Usuario altaCliente(@NotNull @Valid Usuario usuario) {
Optional<Usuario> test = repositorioUsuario.buscar(usuario.getDNI()); Optional<Usuario> test = repositorioUsuario.buscar(usuario.getDNI());
if (test.isPresent()) { if (test.isPresent()) {
...@@ -57,7 +57,7 @@ public class ServicioCarPooling { ...@@ -57,7 +57,7 @@ public class ServicioCarPooling {
return usuario; return usuario;
} }
@Transactional
public Usuario modificarDatosUsuario(@NotNull @Valid Usuario usuarioModificado) { public Usuario modificarDatosUsuario(@NotNull @Valid Usuario usuarioModificado) {
// Buscar el usuario existente por su DNI // Buscar el usuario existente por su DNI
Optional<Usuario> usuarioExistente = repositorioUsuario.buscar(usuarioModificado.getDNI()); Optional<Usuario> usuarioExistente = repositorioUsuario.buscar(usuarioModificado.getDNI());
...@@ -82,7 +82,7 @@ public class ServicioCarPooling { ...@@ -82,7 +82,7 @@ public class ServicioCarPooling {
throw new UsuarioNoRegistrado(); throw new UsuarioNoRegistrado();
} }
} }
@Transactional
public Viaje modificarDatosViaje(@NotNull @Valid Viaje viajeModificado) { public Viaje modificarDatosViaje(@NotNull @Valid Viaje viajeModificado) {
// Buscar el viaje existente por su ID // Buscar el viaje existente por su ID
Optional<Viaje> viajeExistente = repositorioViajes.buscar(viajeModificado.getIdViaje()); Optional<Viaje> viajeExistente = repositorioViajes.buscar(viajeModificado.getIdViaje());
...@@ -107,9 +107,7 @@ public class ServicioCarPooling { ...@@ -107,9 +107,7 @@ public class ServicioCarPooling {
throw new ViajeNoRegistrado(); throw new ViajeNoRegistrado();
} }
} }
@Transactional
public Viaje altaViaje(@NotNull @Valid Viaje v) { public Viaje altaViaje(@NotNull @Valid Viaje v) {
Optional<Viaje> test = repositorioViajes.buscar(v.getIdViaje()); Optional<Viaje> test = repositorioViajes.buscar(v.getIdViaje());
if (test.isPresent()) { if (test.isPresent()) {
...@@ -161,27 +159,45 @@ public class ServicioCarPooling { ...@@ -161,27 +159,45 @@ public class ServicioCarPooling {
} }
@Transactional @Transactional
public void actualizarPuntuacionUsuario(@NotBlank String dni, int nuevaPuntuacion) { public Usuario actualizarPuntuacionUsuario(@NotBlank String dni, double nuevaPuntuacion) {
Optional<Usuario> usuarioExistente = repositorioUsuario.buscar(dni); Optional<Usuario> usuarioExistente = repositorioUsuario.buscar(dni);
Usuario usuario;
if (usuarioExistente.isPresent()) { if (usuarioExistente.isPresent()) {
Usuario usuario = usuarioExistente.get(); usuario = usuarioExistente.get();
repositorioUsuario.actualizarPuntuacion(usuario, nuevaPuntuacion); repositorioUsuario.actualizarPuntuacion(usuario, nuevaPuntuacion);
} else { } else {
throw new UsuarioNoRegistrado(); // O maneja la situación de otra manera según tus necesidades throw new UsuarioNoRegistrado();
} }
return usuario;
} }
/**
@Transactional @Transactional
public List<Reserva> verReserva (@NotBlank String idReserva) { public boolean unirseAReserva(String dniUsuario, int idReserva) {
Reserva r = repositorioReservas.buscar(idReserva).orElseThrow(ReservaNoRegistrada::new);
Usuario usuario = repositorioUsuario.buscar(dniUsuario).orElseThrow(UsuarioNoRegistrado::new);
// Precargar a memoria la relación lazy de cuentas del cliente antes de devolver Reserva reserva = repositorioReservas.buscar(idReserva).orElseThrow(ReservaNoRegistrada::new);
//cliente.verCuentas().size();
return r.; if (usuario.getRol() == Usuario.Rol.PASAJERO || usuario.getRol() == Usuario.Rol.AMBOS) {
reserva.addPasajero(usuario.getDNI());
repositorioReservas.actualizar(reserva);
return true;
} else {
throw new RuntimeException("El usuario no tiene el rol adecuado para unirse a la reserva.");
}
} }
*/
@Transactional
public void darseDeBaja(String DNI) {
repositorioUsuario.eliminarUsuarioPorDNI(DNI);
}
@Transactional
public List<Viaje> listarViajes() {
List<Viaje> viajes = repositorioViajes.obtenerTodosLosViajes();
if (viajes == null)
throw new ViajeNoRegistrado();
return viajes;
}
} }
...@@ -19,6 +19,7 @@ import java.util.Optional; ...@@ -19,6 +19,7 @@ import java.util.Optional;
import java.util.Random; import java.util.Random;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
...@@ -222,20 +223,34 @@ public class ServicioCarPoolingTest ...@@ -222,20 +223,34 @@ public class ServicioCarPoolingTest
} }
@Test @Test
public void testActualizarPuntuacionUsuario() { public void testActualizarPuntuacionUsuario() throws ParseException{
// Datos de prueba // Datos de prueba
String dni = "123456789"; int length = 9;
int nuevaPuntuacion = 5; String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
// Crear un usuario existente // Inicializar el generador de números aleatorios
Usuario usuarioExistente = new Usuario(); Random random = new Random();
usuarioExistente.setDNI(dni);
StringBuilder sb = new StringBuilder(length);
// Generar la cadena aleatoria
for (int i = 0; i < length; i++) {
int randomIndex = random.nextInt(characters.length());
char randomChar = characters.charAt(randomIndex);
sb.append(randomChar);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SistemaCarPooling sis = new SistemaCarPooling();
java.util.Date yourDate = sdf.parse("1992-07-26");
Usuario usuario = new Usuario("Perico", "Alonso", yourDate, sb.toString(), 670988953, "aor00039@red.ujaen.es", "hola", Rol.PASAJERO, sis);
Usuario usuarioGuardado = servicio.altaCliente(usuario);
String dni = sb.toString();
double nuevaPuntuacion = 5;
// Ejecutar el método que se va a probar // Ejecutar el método que se va a probar
servicio.actualizarPuntuacionUsuario(dni, nuevaPuntuacion); Usuario usuarioExistente = servicio.actualizarPuntuacionUsuario(dni, nuevaPuntuacion);
// Verificar que la puntuación se actualizó correctamente // Verificar que la puntuación se actualizó correctamente
assertEquals(Optional.of(nuevaPuntuacion), usuarioExistente.getPuntuacion().get(0)); assertEquals(usuarioExistente.getPuntuacion(), usuarioExistente.getPuntuacion());
assertEquals(1, usuarioExistente.getPuntuacion().size()); assertEquals(1, usuarioExistente.getPuntuacion().size());
} }
......
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