Commit 2a04addb by María Hidalgo

work in progress

parent 60873755
......@@ -10,12 +10,12 @@ import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToMany;
import jakarta.transaction.Transactional;
import jakarta.validation.constraints.Past;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -26,6 +26,8 @@ import jakarta.validation.constraints.NotNull;
@Data
@NoArgsConstructor
@Entity
public class Viaje {
@Id
......@@ -59,12 +61,12 @@ public class Viaje {
EstadoViaje estado;
// Lista de usuarios que son confirmados en un viaje
@ManyToMany(cascade = CascadeType.ALL)
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER )
@JoinColumn(name = "confirmado_usuario_dni")
public List<Usuario> usuariosConfirmados;
// Lista de usuarios que solicitan unirse a un viaje
@ManyToMany(cascade = CascadeType.ALL)
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "solicitante_usuario_dni")
public List<Usuario> usuariosSolicitantes;
......@@ -103,7 +105,8 @@ public class Viaje {
public void setPlazasDisponibles(int plazasDisponibles) {
this.plazasDisponibles = plazasDisponibles;
}
@Transactional
public void enviarSolicitudParaSerPasajero(@NotNull Viaje viaje, @NotNull Usuario pasajero) {
if (estado == EstadoViaje.PENDIENTE && !usuariosSolicitantes.contains(pasajero) && getPlazasDisponibles
() > 0) { // Sino quedan plazas no puede solicitar
......@@ -114,7 +117,7 @@ public class Viaje {
}
}
@Transactional
public void confirmarPasajero(@NotNull Usuario pasajero, @NotNull Usuario conductor) {
// Verificar si el pasajero está en la lista de solicitantes
if (estado == EstadoViaje.PENDIENTE && usuariosSolicitantes.contains(pasajero) && plazasDisponibles > 0) {
......
......@@ -36,7 +36,7 @@ public class RepositorioViajes {
}
public List<Viaje> buscarViajes(String origen, String destino, LocalDateTime fecha) {
public List<Viaje> buscar(String origen, String destino, LocalDateTime fecha) {
List<Viaje> viajes = new ArrayList<>();
// try {
Query q = em.createQuery("SELECT v FROM Viaje v WHERE v.origen = ?1 AND v.destino = ?2 ");
......
package es.ujaen.dae.carpoolingdae.servicios;
import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
......@@ -27,6 +26,7 @@ import es.ujaen.dae.carpoolingdae.repositorios.RepositorioViajes;
@Service
@Validated
public class SistemaCarpooling {
@Autowired
......@@ -45,6 +45,7 @@ public class SistemaCarpooling {
* @param usuario el usuario a dar de alta
*/
public Usuario altaUsuario(@NotNull @Valid Usuario usuario)throws UsuarioNoRegistrado{
if (repositorioUsuarios.buscar(usuario.getDni()).isPresent()){
......@@ -95,9 +96,10 @@ public class SistemaCarpooling {
* @return viajes encontrados con esos datos
*/
public List<Viaje> buscarViajes(@NotBlank String origen, @NotBlank String destino, @NotNull LocalDateTime fecha) {
List<Viaje> listaViajes = repositorioViajes.buscarViajes(origen,destino,fecha);
List<Viaje> listaViajes = repositorioViajes.buscar(origen,destino,fecha);
return listaViajes;
......@@ -108,6 +110,7 @@ public class SistemaCarpooling {
* @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()
......@@ -122,14 +125,14 @@ public class SistemaCarpooling {
* @param viaje al que se envía la solicitud
*/
@Transactional
public void enviarSolicitudViaje(@NotNull Viaje viaje, @NotNull Usuario pasajero) {
// Llamar a la función en viaje para enviar la solicitud
viaje.enviarSolicitudParaSerPasajero(viaje, pasajero);
repositorioViajes.actualizarViajes(viaje);
}
public void aceptarPasajeroViaje(@NotNull Viaje viaje, @NotNull Usuario pasajero,
@NotNull Usuario conductor) {
......@@ -144,6 +147,7 @@ public class SistemaCarpooling {
* @return lista de solicitudes pendientes del viaje
*/
public List<Usuario> obtenerSolicitudesPendientes(@NotNull Viaje viaje) {
// Verificar que el viaje esté en estado PENDIENTE
if (viaje.getEstado() != EstadoViaje.PENDIENTE) {
......@@ -160,7 +164,7 @@ public class SistemaCarpooling {
* @param viaje el viaje del que se obtendrán los pasajeros
* @return lista de pasajeros confirmados del viaje
*/
public List<Usuario> obtenerPasajeros(@NotNull Viaje viaje) {
//Podemos ver los pasajeros antes y después del viaje
if (viaje.getEstado() != EstadoViaje.PENDIENTE && viaje.getEstado() != EstadoViaje.REALIZADO) {
......
......@@ -181,17 +181,20 @@ public class SistemaCarpoolingTest {
Assertions.assertThat(viajeEnc.getPrecioAsiento()).isEqualTo(viaje.getPrecioAsiento());
Optional <Usuario> pasajeroLogin = sistemaCarpooling.loginUsuario(pasajero.getDni(), "clave");
// Optional <Usuario> pasajeroLogin = sistemaCarpooling.loginUsuario(pasajero.getDni(), "clave");
viajeEnc.setEstado(EstadoViaje.PENDIENTE);
sistemaCarpooling.enviarSolicitudViaje(viajeEnc, pasajeroLogin.get());
// Obtener solicitudes pendientes del viaje
List<Usuario> solicitudesPendientes = sistemaCarpooling.obtenerSolicitudesPendientes(viajeEnc);
// Comprobar que el pasajero está en la lista de solicitudes pendientes
assertTrue(solicitudesPendientes.contains(pasajeroLogin.get()));
assertEquals(EstadoViaje.PENDIENTE, viaje.getEstado());
}
//@Transactional
@Test
public void testAceptarPasajeroViaje() {
// Crear un usuario conductor sistemaCarpooling.enviarSolicitudViaje(viajeEnc, pasajeroLogin.get());
......
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