Changes by Álvaro Ordoñez colabora en el anterior commit y además introduce los…

Changes by Álvaro Ordoñez colabora en el anterior commit y además introduce los cambios para poder diferenciar entre viajes realizados y por realizar
parent b81f613c
......@@ -10,6 +10,9 @@ import java.util.List;
import com.carpooling.carpoolingaoraha.entidades.*;
import jakarta.persistence.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
@Entity
@Table (name = "reservas")
public class Reserva {
......@@ -26,9 +29,14 @@ public class Reserva {
private Usuario conductor;
@Transient
private ArrayList<String> pasajeros;
@Max(5)
private int puntuacion;
@NotNull
private int numPasajeros;
@NotNull
private boolean reservaConcluida;
@Transient
private Viaje viaje;
@Transient
......@@ -45,6 +53,17 @@ public class Reserva {
this.sistema.addReserva(this);
this.puntuacion = 0;
this.pasajeros = new ArrayList<String>();
this.reservaConcluida = false;
anadirReserva(this);
}
public void anadirReserva(Reserva res){
this.sistema.getReservas().add(res);
}
public void anadirViaje(Viaje viaje){
if(reservaConcluida)
viaje.viajeRealizado(viaje);
}
public void nuevoViaje(Viaje v)
......@@ -128,4 +147,8 @@ public class Reserva {
}
return false;
}
public boolean getReservaConcluida(){return this.reservaConcluida;}
public void setReservaConcluida(boolean reservaConcluida) { this.reservaConcluida = reservaConcluida; }
}
......@@ -5,15 +5,17 @@ import java.util.List;
public class SistemaCarPooling {
private String nombre;
private List<Viaje> viajes;
private List<Usuario> usuarios;
private List<Reserva> reservas;
private List<Viaje> listadoViajes;
private List<Usuario> listadoUsuarios;
private List<Reserva> listadoReservas;
private List<Viaje> viajesRealizados;
public SistemaCarPooling() {
this.nombre = "Blablacar";
this.viajes = new ArrayList<>();
this.usuarios = new ArrayList<>();
this.reservas = new ArrayList<>();
this.listadoViajes = new ArrayList<>();
this.listadoUsuarios = new ArrayList<>();
this.listadoReservas = new ArrayList<>();
this.viajesRealizados = new ArrayList<>();
}
public String getNombre() {
......@@ -25,37 +27,37 @@ public class SistemaCarPooling {
}
public List<Viaje> getViajes() {
return viajes;
return listadoViajes;
}
public void setViajes(List<Viaje> viajes) {
this.viajes = viajes;
this.listadoViajes = viajes;
}
public List<Usuario> getUsuarios() {
return usuarios;
return listadoUsuarios;
}
public void setUsuarios(List<Usuario> usuarios) {
this.usuarios = usuarios;
this.listadoUsuarios = usuarios;
}
public void addViaje(Viaje viaje){
viajes.add(viaje);
listadoViajes.add(viaje);
}
public void addReserva(Reserva res){
reservas.add(res);
listadoReservas.add(res);
}
public List<Reserva> getReservas() {
return reservas;
return listadoReservas;
}
public void setReservas(List<Reserva> reservas) {
this.reservas = reservas;
this.listadoReservas = reservas;
}
public boolean login(String email, String claveAcceso) {
/*public boolean login(String email, String claveAcceso) {
List<Usuario> usuariosRegistrados = usuarios;
for (Usuario usuario : usuariosRegistrados) {
......@@ -63,7 +65,39 @@ public class SistemaCarPooling {
return true; // Coinciden las credenciales, el inicio de sesión es exitoso
}
}
return false; // Las credenciales no coinciden, el inicio de sesión falla
// Si llegamos aquí, significa que no se encontró un usuario con las credenciales proporcionadas
throw new UsuarioNoRegistrado(); // Lanzar la excepción UsuarioNoRegistrado
}
public void registrarse(String nombre, String apellidos, Date FNac, String DNI, int telefono, String email,
String claveAcceso) {
// Verificar si el usuario ya está registrado
for (Usuario usuario : usuarios) {
if (usuario.getEmail().equals(email)) {
throw new CorreoDuplicadoException();
}
}
// Si no hay ningún usuario con el mismo correo, crear un nuevo usuario y agregarlo a la lista
Usuario nuevoUsuario = new Usuario(nombre, apellidos, FNac, DNI, telefono, email, claveAcceso, Rol.PASAJERO);
nuevoUsuario.setSistemaCarPooling(this);
usuarios.add(nuevoUsuario);
}*/
public List<Viaje> getViajesRealizados() {
return viajesRealizados;
}
public void setViajesRealizadoss(List<Viaje> viajes) {
this.viajesRealizados = viajes;
}
}
package com.carpooling.carpoolingaoraha.entidades;
import com.carpooling.carpoolingaoraha.excepciones.ReservaNoRegistrada;
import com.carpooling.carpoolingaoraha.excepciones.ViajeNoRegistrado;
import com.carpooling.carpoolingaoraha.utils.ExprReg;
import jakarta.persistence.*;
import org.antlr.v4.runtime.misc.NotNull;
import javax.validation.constraints.Max;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.util.*;
import static com.carpooling.carpoolingaoraha.entidades.Rol.*;
@Entity
@Table(name = "solicitudes")
public class Solicitud {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "id_reserva")
private Reserva reserva;
@ManyToOne
@JoinColumn(name = "id_pasajero")
private Usuario pasajero;
// Otros campos y métodos necesarios
public Solicitud(){
}
// Constructores, getters y setters
public Solicitud(Reserva reserva, Usuario pasajero) {
this.reserva = reserva;
this.pasajero = pasajero;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Reserva getReserva() {
return reserva;
}
public void setReserva(Reserva reserva) {
this.reserva = reserva;
}
public Usuario getPasajero() {
return pasajero;
}
public void setPasajero(Usuario pasajero) {
this.pasajero = pasajero;
}
}
package com.carpooling.carpoolingaoraha.entidades;
import com.carpooling.carpoolingaoraha.excepciones.ReservaNoRegistrada;
import com.carpooling.carpoolingaoraha.excepciones.SolicitudYaExistente;
import com.carpooling.carpoolingaoraha.excepciones.ViajeNoRegistrado;
import com.carpooling.carpoolingaoraha.utils.CodificadorPassword;
import com.carpooling.carpoolingaoraha.utils.ExprReg;
import jakarta.persistence.*;
import org.antlr.v4.runtime.misc.NotNull;
......@@ -24,8 +28,10 @@ public class Usuario {
@NotNull
private String nombre;
@NotNull
private String apellidos;
@NotNull
@Past
private Date FNac;
......@@ -47,6 +53,7 @@ public class Usuario {
@NotNull
private String claveAcceso;
@Transient
private ArrayList<Integer> puntuacion;
......@@ -59,6 +66,13 @@ public class Usuario {
@Max(5)
double puntuacionMedia;
@OneToMany(mappedBy = "pasajero", cascade = CascadeType.ALL)
private List<Solicitud> solicitudesPendientes;
@OneToMany(mappedBy = "pasajero", cascade = CascadeType.ALL)
private List<Solicitud> historicoSolicitudes; // Lista de solicitudes realizadas (histórico)
public Usuario() {
}
......@@ -73,11 +87,14 @@ public class Usuario {
this.claveAcceso = claveAcceso;
this.puntuacion = new ArrayList<>();
this.rol = rol;
this.sistemaCarPooling = new SistemaCarPooling();
puntuacionMedia = 0;
this.viajesOfertados = new ArrayList<>();
this.solicitudesPendientes = new ArrayList<>();
this.historicoSolicitudes = new ArrayList<>();
this.puntuacionMedia = 0;
}
public void setSistemaCarPooling(SistemaCarPooling sis){ this.sistemaCarPooling = sis;}
public String getNombre() {
return nombre;
}
......@@ -173,7 +190,7 @@ public class Usuario {
this.viajesOfertados.add(reserva.getIdReserva());
return true;
}
return false;
throw new ReservaNoRegistrada();
}
public boolean aceptarPasajero(int idReserva, String DNI, Rol rol){ //Le pasamos el rol del conductor
......@@ -203,6 +220,10 @@ public class Usuario {
public List<Viaje> buscarViaje(String origen, String destino, Date fecha, Rol rol, List<Viaje> todosLosViajes) {
List<Viaje> viajesDisponibles = new ArrayList<>();
if(todosLosViajes.size() == 0){
throw new ViajeNoRegistrado();
}
for (Viaje viaje : todosLosViajes) {
if (viaje.getOrigen().equals(origen) && viaje.getDestino().equals(destino) &&
viaje.getFechaSalida().equals(fecha)) {
......@@ -212,6 +233,7 @@ public class Usuario {
}
}
// Filtrar las reservas asociadas a los viajes y calcular la puntuación de los conductores
List<Reserva> reservasAsociadas = new ArrayList<>();
for (Reserva reserva : sistemaCarPooling.getReservas()) {
......@@ -244,5 +266,59 @@ public class Usuario {
return viajesDisponibles;
}
public void finalizaViaje(Reserva reserva){
if(this.rol == CONDUCTOR || this.rol == AMBOS){
reserva.setReservaConcluida(true);
// Mueve la solicitud asociada al histórico después de que el viaje ha concluido
moverSolicitudAlHistorico(reserva);
}
}
public boolean solicitarViaje(int idReserva, Rol rol) {
if (rol == PASAJERO || 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
Solicitud solicitud = new Solicitud();
solicitud.setReserva(reserva);
solicitud.setPasajero(this);
this.solicitudesPendientes.add(solicitud);
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) {
// Verificar si ya hay una solicitud pendiente para esta reserva
return this.solicitudesPendientes.stream().anyMatch(solicitud -> solicitud.getReserva().equals(reserva));
}
private void moverSolicitudAlHistorico(Reserva reserva) {
Optional<Solicitud> solicitudOptional = this.solicitudesPendientes.stream()
.filter(solicitud -> solicitud.getReserva().equals(reserva))
.findFirst();
solicitudOptional.ifPresent(solicitud -> {
this.solicitudesPendientes.remove(solicitud);
this.historicoSolicitudes.add(solicitud);
});
}
public boolean claveValida(String clave) {
return CodificadorPassword.igual(clave, this.claveAcceso);
}
}
package com.carpooling.carpoolingaoraha.entidades;
import jakarta.persistence.*;
import jakarta.transaction.TransactionScoped;
import javax.validation.constraints.Future;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Entity
@Table (name = "viajes")
public class Viaje {
@NotNull
private String origen;
@NotNull
private String destino;
@NotNull
@Future
private Date fechaSalida;
@NotNull
private int nAsientos;
@NotNull
private int precioAsiento;
@Transient
private SistemaCarPooling sis;
@Id
private int idViaje;
public Viaje(){}
......@@ -21,8 +34,11 @@ public class Viaje {
this.nAsientos = nAsientos;
this.precioAsiento = precioAsiento;
this.idViaje = idViaje;
anadirViaje(this);
}
public void setSis(SistemaCarPooling sis){this.sis = sis;}
public int getIdViaje() {
return idViaje;
}
......@@ -70,4 +86,12 @@ public class Viaje {
public void setPrecioAsiento(int precioAsiento) {
this.precioAsiento = precioAsiento;
}
private void anadirViaje(Viaje viaje){
this.sis.getViajes().add(viaje);
}
public void viajeRealizado(Viaje viaje){
this.sis.getViajesRealizados().add(viaje);
}
}
package com.carpooling.carpoolingaoraha.excepciones;
public class CorreoDuplicadoException extends RuntimeException{
public CorreoDuplicadoException(){}
}
package com.carpooling.carpoolingaoraha.excepciones;
public class SolicitudYaExistente extends RuntimeException{
public SolicitudYaExistente(){}
}
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