Commit 57bb271c by María Hidalgo

añadida funcion obtenerViajesPendientesConductor

parent d2b9e2cd
......@@ -4,7 +4,6 @@ import java.io.Serializable;
import java.time.LocalDate;
import java.util.ArrayList;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Past;
import jakarta.validation.constraints.Pattern;
......@@ -16,7 +15,9 @@ import jakarta.validation.constraints.NotNull;
import java.util.List;
import es.ujaen.dae.carpoolingdae.entidades.Viaje.EstadoViaje;
import es.ujaen.dae.carpoolingdae.excepciones.NoAceptaConductor;
import es.ujaen.dae.carpoolingdae.excepciones.ViajeRealizado;
import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5;
import es.ujaen.dae.carpoolingdae.utils.ExprReg;
......@@ -69,8 +70,8 @@ public class Usuario implements Serializable {
String clave;
// Viajes creados por el conductor
@OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
//@JoinColumn(name = "usuario_dni")
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
// @JoinColumn(name = "usuario_dni")
List<Viaje> viajesComoConductor;
public Usuario(String dni, String nombre, String apellidos, LocalDate fecha_nac, String telef, String email,
......@@ -130,6 +131,10 @@ public class Usuario implements Serializable {
if (!viajesComoConductor.contains(viaje)) {
throw new NoAceptaConductor();
}
// Verifica si el viaje está en estado pendiente
if (viaje.getEstado() != EstadoViaje.PENDIENTE) {
throw new ViajeRealizado();
}
// Llamar a la función en Viaje para confirmar al pasajero
viaje.confirmarPasajero(pasajero, conductor);
......
......@@ -8,6 +8,8 @@ import java.util.List;
import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
......@@ -46,6 +48,15 @@ public class Viaje {
@NotNull
Double precioAsiento;
public enum EstadoViaje {
PENDIENTE,
REALIZADO,
CANCELADO
}
// Añado el atributo de estado usando el enum
@Enumerated(EnumType.STRING)
EstadoViaje estado;
// Lista de usuarios que son confirmados en un viaje
@ManyToMany(cascade = CascadeType.ALL)
......@@ -67,6 +78,7 @@ public class Viaje {
this.fechaHora = fechaHora;
this.plazasDisponibles = plazasDisponibles;
this.precioAsiento = precioAsiento;
this.estado = EstadoViaje.PENDIENTE;
usuariosSolicitantes = new ArrayList<>();
usuariosConfirmados = new ArrayList<>();
......@@ -93,7 +105,7 @@ public class Viaje {
}
public void enviarSolicitudParaSerPasajero(@NotNull Viaje viaje, @NotNull Usuario pasajero) {
if (!usuariosSolicitantes.contains(pasajero) && getPlazasDisponibles
if (estado == EstadoViaje.PENDIENTE && !usuariosSolicitantes.contains(pasajero) && getPlazasDisponibles
() > 0) { // Sino quedan plazas no puede solicitar
// unirse
usuariosSolicitantes.add(pasajero);
......@@ -104,7 +116,7 @@ public class Viaje {
public void confirmarPasajero(@NotNull Usuario pasajero, @NotNull Usuario conductor) {
// Verificar si el pasajero está en la lista de solicitantes
if (usuariosSolicitantes.contains(pasajero) && plazasDisponibles > 0) {
if (estado == EstadoViaje.PENDIENTE && usuariosSolicitantes.contains(pasajero) && plazasDisponibles > 0) {
// Mover al pasajero de la lista de solicitantes a la lista de confirmados
usuariosSolicitantes.remove(pasajero);
......
package es.ujaen.dae.carpoolingdae.excepciones;
public class ViajeRealizado extends RuntimeException {
public ViajeRealizado() {
}
}
......@@ -7,7 +7,7 @@ import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -16,6 +16,7 @@ import org.springframework.validation.annotation.Validated;
import es.ujaen.dae.carpoolingdae.entidades.Usuario;
import es.ujaen.dae.carpoolingdae.entidades.Viaje;
import es.ujaen.dae.carpoolingdae.entidades.Viaje.EstadoViaje;
import es.ujaen.dae.carpoolingdae.excepciones.UsuarioNoRegistrado;
import es.ujaen.dae.carpoolingdae.excepciones.UsuarioYaRegistrado;
import es.ujaen.dae.carpoolingdae.repositorios.RepositorioUsuarios;
......@@ -98,7 +99,18 @@ public class SistemaCarpooling {
return listaViajes;
}
/**
* Obtener viajes pendientes de un conductor
*
* @param conductor el usuario conductor
* @return lista de viajes pendientes del conductor
*/
public List<Viaje> obtenerViajesPendientesConductor(@NotNull Usuario conductor) {
// Filtrar los viajes del conductor que aún no han sido realizados
return conductor.getViajesComoConductor().stream()
.filter(viaje -> viaje.getEstado() == EstadoViaje.PENDIENTE)
.collect(Collectors.toList());
}
/**
* Enviar solicitud para ser pasajero de un viaje
......
package es.ujaen.dae.carpoolingdae.entidades;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate;
......@@ -8,6 +9,7 @@ import java.time.LocalDateTime;
import org.junit.jupiter.api.Test;
import es.ujaen.dae.carpoolingdae.entidades.Viaje.EstadoViaje;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
......@@ -76,6 +78,10 @@ public class UsuarioTest {
2,
50.0);
usuario.agregarViajeComoConductor(viaje);
viaje.setEstado(EstadoViaje.PENDIENTE);
assertTrue(usuario.viajesComoConductor.contains(viaje));
assertEquals(EstadoViaje.PENDIENTE, viaje.getEstado());
assertTrue(usuario.viajesComoConductor.contains(viaje));
}
......
package es.ujaen.dae.carpoolingdae.entidades;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
......@@ -14,6 +15,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import es.ujaen.dae.carpoolingdae.entidades.Viaje.EstadoViaje;
import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible;
import es.ujaen.dae.carpoolingdae.servicios.SistemaCarpooling;
import jakarta.validation.ConstraintViolation;
......@@ -124,12 +126,14 @@ public class ViajeTest {
"clave");
viaje.setPlazasDisponibles(0);
viaje.usuariosSolicitantes.add(pasajero);
viaje.setEstado(EstadoViaje.PENDIENTE);
viaje.confirmarPasajero(pasajero, conductor);
// Verificación
assertFalse( viaje.getPlazasDisponibles() > 0);
assertFalse( viaje.usuariosConfirmados.contains(pasajero));
assertFalse( viaje.usuariosSolicitantes.isEmpty());
assertEquals(EstadoViaje.PENDIENTE, viaje.getEstado());
}
......
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