Commit 57bb271c by María Hidalgo

añadida funcion obtenerViajesPendientesConductor

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