Commit 2a04addb by María Hidalgo

work in progress

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