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

parent d5830780
......@@ -43,7 +43,9 @@ public class Reserva {
@Transient
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) {
this.conductor = conductor;
this.idReserva = ++incrementaReserva;
......@@ -148,4 +150,6 @@ public class Reserva {
public boolean getReservaConcluida(){return this.reservaConcluida;}
public void setReservaConcluida(boolean reservaConcluida) { this.reservaConcluida = reservaConcluida; }
}
......@@ -56,7 +56,7 @@ public class Usuario {
private String claveAcceso;
@Transient
private ArrayList<Integer> puntuacion;
private ArrayList<Double> puntuacion;
@NotNull
private Rol rol;
......@@ -157,11 +157,11 @@ public class Usuario {
this.claveAcceso = claveAcceso;
}
public ArrayList<Integer> getPuntuacion() {
public ArrayList<Double> getPuntuacion() {
return puntuacion;
}
public void setPuntuacion(int puntuacion) {
public void setPuntuacion(double puntuacion) {
this.puntuacion.add(puntuacion);
}
......
......@@ -50,7 +50,7 @@ public class UsuarioRepository {
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
Usuario usuarioExistente = em.find(Usuario.class, usuario.getDNI());
......@@ -59,8 +59,8 @@ public class UsuarioRepository {
usuarioExistente.getPuntuacion().add(nuevaPuntuacion);
// Calcula la puntuación media
List<Integer> puntuaciones = usuarioExistente.getPuntuacion();
double puntuacionMedia = puntuaciones.stream().mapToInt(Integer::intValue).average().orElse(0.0);
List<Double> puntuaciones = usuarioExistente.getPuntuacion();
double puntuacionMedia = puntuaciones.stream().mapToInt(Double::intValue).average().orElse(0.0);
usuarioExistente.setPuntuacionMedia(puntuacionMedia);
// Guarda el usuario actualizado (sin duplicar)
......@@ -73,6 +73,14 @@ public class UsuarioRepository {
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 {
//AltaViaje???
//Cacheable
@Transactional
public Usuario altaCliente(@NotNull @Valid Usuario usuario) {
Optional<Usuario> test = repositorioUsuario.buscar(usuario.getDNI());
if (test.isPresent()) {
......@@ -57,7 +57,7 @@ public class ServicioCarPooling {
return usuario;
}
@Transactional
public Usuario modificarDatosUsuario(@NotNull @Valid Usuario usuarioModificado) {
// Buscar el usuario existente por su DNI
Optional<Usuario> usuarioExistente = repositorioUsuario.buscar(usuarioModificado.getDNI());
......@@ -82,7 +82,7 @@ public class ServicioCarPooling {
throw new UsuarioNoRegistrado();
}
}
@Transactional
public Viaje modificarDatosViaje(@NotNull @Valid Viaje viajeModificado) {
// Buscar el viaje existente por su ID
Optional<Viaje> viajeExistente = repositorioViajes.buscar(viajeModificado.getIdViaje());
......@@ -107,9 +107,7 @@ public class ServicioCarPooling {
throw new ViajeNoRegistrado();
}
}
@Transactional
public Viaje altaViaje(@NotNull @Valid Viaje v) {
Optional<Viaje> test = repositorioViajes.buscar(v.getIdViaje());
if (test.isPresent()) {
......@@ -161,27 +159,45 @@ public class ServicioCarPooling {
}
@Transactional
public void actualizarPuntuacionUsuario(@NotBlank String dni, int nuevaPuntuacion) {
public Usuario actualizarPuntuacionUsuario(@NotBlank String dni, double nuevaPuntuacion) {
Optional<Usuario> usuarioExistente = repositorioUsuario.buscar(dni);
Usuario usuario;
if (usuarioExistente.isPresent()) {
Usuario usuario = usuarioExistente.get();
usuario = usuarioExistente.get();
repositorioUsuario.actualizarPuntuacion(usuario, nuevaPuntuacion);
} else {
throw new UsuarioNoRegistrado(); // O maneja la situación de otra manera según tus necesidades
throw new UsuarioNoRegistrado();
}
return usuario;
}
/**
@Transactional
public List<Reserva> verReserva (@NotBlank String idReserva) {
Reserva r = repositorioReservas.buscar(idReserva).orElseThrow(ReservaNoRegistrada::new);
public boolean unirseAReserva(String dniUsuario, int idReserva) {
Usuario usuario = repositorioUsuario.buscar(dniUsuario).orElseThrow(UsuarioNoRegistrado::new);
// Precargar a memoria la relación lazy de cuentas del cliente antes de devolver
//cliente.verCuentas().size();
return r.;
Reserva reserva = repositorioReservas.buscar(idReserva).orElseThrow(ReservaNoRegistrada::new);
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;
import java.util.Random;
import static org.junit.Assert.*;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertTrue;
......@@ -222,20 +223,34 @@ public class ServicioCarPoolingTest
}
@Test
public void testActualizarPuntuacionUsuario() {
public void testActualizarPuntuacionUsuario() throws ParseException{
// Datos de prueba
String dni = "123456789";
int nuevaPuntuacion = 5;
int length = 9;
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
// Crear un usuario existente
Usuario usuarioExistente = new Usuario();
usuarioExistente.setDNI(dni);
// Inicializar el generador de números aleatorios
Random random = new Random();
// Ejecutar el método que se va a probar
servicio.actualizarPuntuacionUsuario(dni, nuevaPuntuacion);
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
Usuario usuarioExistente = servicio.actualizarPuntuacionUsuario(dni, nuevaPuntuacion);
// 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());
}
......
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