Cambios por Álvaro Herrera

parent 98af7fa1
...@@ -75,6 +75,10 @@ public class Usuario { ...@@ -75,6 +75,10 @@ public class Usuario {
public Usuario() { public Usuario() {
this.puntuacion = new ArrayList<>();
this.viajesOfertados = new ArrayList<>();
this.solicitudesPendientes = new ArrayList<>();
this.historicoSolicitudes = new ArrayList<>();
} }
public Usuario(String nombre, String apellidos, Date FNac, String DNI, int telefono, String email, public Usuario(String nombre, String apellidos, Date FNac, String DNI, int telefono, String email,
...@@ -196,6 +200,14 @@ public class Usuario { ...@@ -196,6 +200,14 @@ public class Usuario {
} }
throw new ReservaNoRegistrada(); throw new ReservaNoRegistrada();
} }
public boolean ofrecerViaje(Reserva v){
if(this.rol == Rol.CONDUCTOR || this.rol == Rol.AMBOS) {
//Crea una reserva
this.viajesOfertados.add(v.getIdReserva());
return true;
}
throw new ReservaNoRegistrada();
}
public boolean aceptarPasajero(int idReserva, String DNI, Rol rol){ //Le pasamos el rol del conductor public boolean aceptarPasajero(int idReserva, String DNI, Rol rol){ //Le pasamos el rol del conductor
if(rol == Rol.CONDUCTOR || rol == Rol.AMBOS){ if(rol == Rol.CONDUCTOR || rol == Rol.AMBOS){
...@@ -303,6 +315,29 @@ public class Usuario { ...@@ -303,6 +315,29 @@ public class Usuario {
return false; return false;
} }
public boolean solicitarViaje(int idReserva, Solicitud s) {
if (rol == Rol.PASAJERO || rol == Rol.AMBOS) {
for (Reserva reserva : sistemaCarPooling.getReservas()) {
if (idReserva == reserva.getIdReserva() && !reserva.getReservaConcluida()) {
// Verificar si ya hay una solicitud pendiente para esta reserva
if (!tieneSolicitudPendiente(reserva)) {
// Crear una nueva solicitud y agregarla a la lista de solicitudes del usuario
s.setReserva(reserva);
s.setPasajero(this);
this.solicitudesPendientes.add(s);
return true;
} else {
throw new SolicitudYaExistente();
}
}
}
// Si no se encuentra la reserva con el ID proporcionado
throw new RuntimeException("Reserva no encontrada");
}
// Si el rol no es PASAJERO o AMBOS
return false;
}
private boolean tieneSolicitudPendiente(Reserva reserva) { private boolean tieneSolicitudPendiente(Reserva reserva) {
// Verificar si ya hay una solicitud pendiente para esta reserva // Verificar si ya hay una solicitud pendiente para esta reserva
return this.solicitudesPendientes.stream().anyMatch(solicitud -> solicitud.getReserva().equals(reserva)); return this.solicitudesPendientes.stream().anyMatch(solicitud -> solicitud.getReserva().equals(reserva));
......
...@@ -6,6 +6,7 @@ import com.carpooling.carpoolingaoraha.entidades.Usuario; ...@@ -6,6 +6,7 @@ import com.carpooling.carpoolingaoraha.entidades.Usuario;
import com.carpooling.carpoolingaoraha.entidades.Viaje; import com.carpooling.carpoolingaoraha.entidades.Viaje;
import com.carpooling.carpoolingaoraha.excepciones.*; import com.carpooling.carpoolingaoraha.excepciones.*;
import com.carpooling.carpoolingaoraha.repositorios.ReservaRepository; import com.carpooling.carpoolingaoraha.repositorios.ReservaRepository;
import com.carpooling.carpoolingaoraha.repositorios.SolicitudRepository;
import com.carpooling.carpoolingaoraha.repositorios.UsuarioRepository; import com.carpooling.carpoolingaoraha.repositorios.UsuarioRepository;
import com.carpooling.carpoolingaoraha.repositorios.ViajeRepository; import com.carpooling.carpoolingaoraha.repositorios.ViajeRepository;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
...@@ -22,6 +23,8 @@ import javax.validation.constraints.NotNull; ...@@ -22,6 +23,8 @@ import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import static com.carpooling.carpoolingaoraha.entidades.Usuario.Rol.CONDUCTOR;
@Service @Service
@Validated @Validated
public class ServicioCarPooling { public class ServicioCarPooling {
...@@ -34,6 +37,8 @@ public class ServicioCarPooling { ...@@ -34,6 +37,8 @@ public class ServicioCarPooling {
@Autowired @Autowired
UsuarioRepository repositorioUsuario; UsuarioRepository repositorioUsuario;
@Autowired
SolicitudRepository repositorioSolicitud;
@Autowired @Autowired
public ServicioCarPooling() { public ServicioCarPooling() {
...@@ -134,12 +139,24 @@ public class ServicioCarPooling { ...@@ -134,12 +139,24 @@ public class ServicioCarPooling {
@CacheEvict(value="usuarios", key = "#dni") @CacheEvict(value="usuarios", key = "#dni")
public Reserva crearReserva(@NotBlank String dni) { public Reserva crearReserva(@NotBlank String dni) {
Usuario usuario = repositorioUsuario.buscar(dni).orElseThrow(UsuarioNoRegistrado::new); Usuario usuario = repositorioUsuario.buscar(dni).orElseThrow(UsuarioNoRegistrado::new);
//correcto??
Reserva reserva = new Reserva(); Reserva reserva = new Reserva();
usuario.setRol(CONDUCTOR);
usuario.ofrecerViaje(reserva);
repositorioReservas.guardar(reserva); repositorioReservas.guardar(reserva);
return reserva; return reserva;
} }
@CacheEvict(value="solicitudes", key = "#id")
public Solicitud crearSolicitud(@NotBlank String dni, @NotBlank int idReserva) {
Usuario usuario = repositorioUsuario.buscar(dni).orElseThrow(UsuarioNoRegistrado::new);
Reserva reserva = repositorioReservas.buscar(idReserva).orElseThrow(UsuarioNoRegistrado::new);
Solicitud s = new Solicitud();
usuario.solicitarViaje(reserva.getIdReserva(),s);
repositorioSolicitud.guardar(s);
return s;
}
/** /**
@Transactional @Transactional
public List<Reserva> verReserva (@NotBlank String idReserva) { public List<Reserva> verReserva (@NotBlank String idReserva) {
......
package com.carpooling.carpoolingaoraha.services; package com.carpooling.carpoolingaoraha.services;
import com.carpooling.carpoolingaoraha.entidades.SistemaCarPooling; import com.carpooling.carpoolingaoraha.entidades.*;
import com.carpooling.carpoolingaoraha.entidades.Usuario.*; import com.carpooling.carpoolingaoraha.entidades.Usuario.*;
import com.carpooling.carpoolingaoraha.repositorios.ReservaRepository; import com.carpooling.carpoolingaoraha.repositorios.ReservaRepository;
import com.carpooling.carpoolingaoraha.repositorios.UsuarioRepository; import com.carpooling.carpoolingaoraha.repositorios.UsuarioRepository;
......
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