Commit bb34dd1b by María Hidalgo

Modificaciones realizadas

parent cdf72f89
...@@ -29,11 +29,11 @@ ...@@ -29,11 +29,11 @@
<artifactId>spring-boot-starter-data-jpa</artifactId> <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> --> </dependency> -->
<dependency> <!-- <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId> <artifactId>hibernate-core</artifactId>
<version>5.0.7.Final</version> <version>5.0.7.Final</version>
</dependency> </dependency> -->
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
......
package es.ujaen.dae.carpoolingdae.entidades;
/* import java.util.ArrayList;
import java.util.List; */
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Reserva {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id;
// @OneToMany
// private List<Usuario> pasajerosConfirmados = new ArrayList<>();
// Constructor, getters y setters
}
...@@ -3,8 +3,6 @@ package es.ujaen.dae.carpoolingdae.entidades; ...@@ -3,8 +3,6 @@ package es.ujaen.dae.carpoolingdae.entidades;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.Email; import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Past; import javax.validation.constraints.Past;
...@@ -13,6 +11,7 @@ import javax.validation.constraints.Size; ...@@ -13,6 +11,7 @@ import javax.validation.constraints.Size;
import java.util.List; import java.util.List;
import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible;
import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5; import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5;
//import org.hibernate.mapping.List; //import org.hibernate.mapping.List;
...@@ -28,17 +27,16 @@ import lombok.NoArgsConstructor; ...@@ -28,17 +27,16 @@ import lombok.NoArgsConstructor;
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@Entity
public class Usuario { public class Usuario {
// Lista de viajes como conductor // Lista de viajes como conductor
private List<Viaje> viajesComoConductor; List<Viaje> viajesComoConductor;
// Lista de viajes como pasajero // Lista de viajes como pasajero
private List<Viaje> viajesComoPasajero; List<Viaje> viajesComoPasajero;
@NotBlank @NotBlank
@Id
@Size(min = 9, max = 9) @Size(min = 9, max = 9)
@Pattern(regexp = ExprReg.DNI) @Pattern(regexp = ExprReg.DNI)
String dni; String dni;
...@@ -100,10 +98,7 @@ public class Usuario { ...@@ -100,10 +98,7 @@ public class Usuario {
return email; return email;
} }
public List<Viaje> getviajesComoConductor() {
return viajesComoConductor;
}
/** /**
* Compara la clave con la del usuario, codificándola en Md5 * Compara la clave con la del usuario, codificándola en Md5
* *
...@@ -114,5 +109,29 @@ public class Usuario { ...@@ -114,5 +109,29 @@ public class Usuario {
public boolean claveValida(String clave) { public boolean claveValida(String clave) {
return clave.equals(clave); return clave.equals(clave);
} }
public void agregarViajeComoConductor(Viaje viaje) {
// Agregar el viaje a la lista de viajes del usuario como conductor
viajesComoConductor.add(viaje);
}
public void enviarSolicitudParaSerPasajero(Viaje viaje) {
if (!viaje.usuariosSolicitantes.contains(this) && viaje.getPlazas() > 0) {
viaje.usuariosSolicitantes.add(this);
} else {
throw new PlazaNoDisponible();
}
}
/* public void confirmarPasajero(Viaje viaje) {
if (viajesComoConductor.contains(viaje) && viaje.usuariosSolicitantes.contains(this)) {
viaje.usuariosSolicitantes.remove(this);
viaje.usuariosConfirmados.add(this);
} else {
throw new NoAceptaConductor();
}
} */
} }
...@@ -4,28 +4,24 @@ import java.time.LocalDateTime; ...@@ -4,28 +4,24 @@ import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.persistence.GeneratedValue; import javax.validation.Valid;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past; import javax.validation.constraints.Past;
import es.ujaen.dae.carpoolingdae.excepciones.PlazaNoDisponible; import es.ujaen.dae.carpoolingdae.excepciones.NoAceptaConductor;
public class Viaje { public class Viaje {
// Lista de usuarios que solicitan unirse a un viaje // Lista de usuarios que solicitan unirse a un viaje
private List<Usuario> usuariosSolicitantes = new ArrayList<>(); List<Usuario> usuariosSolicitantes = new ArrayList<>();
// Lista de usuarios que son confirmados en un viaje // Lista de usuarios que son confirmados en un viaje
private List<Usuario> usuariosConfirmados = new ArrayList<>(); List<Usuario> usuariosConfirmados = new ArrayList<>();
@ManyToOne
private Usuario conductor;
@Id //@GeneratedValue(strategy = GenerationType.IDENTITY)
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id; int id;
@NotBlank @NotBlank
...@@ -43,6 +39,8 @@ public class Viaje { ...@@ -43,6 +39,8 @@ public class Viaje {
@NotBlank @NotBlank
Double precioAsiento; Double precioAsiento;
private Usuario conductor;
public Viaje(int id, String destino, String origen, LocalDateTime fecha_hora, int plazasDisponibles, public Viaje(int id, String destino, String origen, LocalDateTime fecha_hora, int plazasDisponibles,
Double precioAsiento) { Double precioAsiento) {
this.id = id; this.id = id;
...@@ -78,19 +76,24 @@ public class Viaje { ...@@ -78,19 +76,24 @@ public class Viaje {
return precioAsiento; return precioAsiento;
} }
public List<Usuario> getUsuariosSolicitantes() { // Método para obtener el conductor del viaje
return usuariosSolicitantes; public Usuario getConductor() {
} return conductor;
public List<Usuario> getusuariosConfirmados() {
return usuariosConfirmados;
} }
public void setConductor(Usuario conductor) { public void setConductor(Usuario conductor) {
this.conductor = conductor; this.conductor = conductor;
} }
public void addPasajero(Usuario pasajero) { public List<Usuario> getUsuariosConfirmados(){
return usuariosConfirmados;
}
public List<Usuario> getUsuariosSolicitantes(){
return usuariosSolicitantes;
}
/* public void addPasajero(Usuario pasajero) {
if (plazasDisponibles > 0) { if (plazasDisponibles > 0) {
usuariosConfirmados.add(pasajero); usuariosConfirmados.add(pasajero);
plazasDisponibles--; plazasDisponibles--;
...@@ -98,6 +101,28 @@ public class Viaje { ...@@ -98,6 +101,28 @@ public class Viaje {
throw new PlazaNoDisponible(); throw new PlazaNoDisponible();
} }
} */
public void reducePlazasDisponibles(@NotNull @Valid Viaje viaje) {
if (plazasDisponibles > 0) {
plazasDisponibles--;
}
}
public void confirmarPasajero(@NotNull @Valid Usuario pasajero) {
// Verificar si el usuario que acepta es el conductor del viaje
if (!this.getConductor().equals(conductor)) {
throw new NoAceptaConductor();
}
// Verificar si el pasajero está en la lista de solicitantes
if (usuariosSolicitantes.contains(pasajero)) {
// Mover al pasajero de la lista de solicitantes a la lista de confirmados
usuariosSolicitantes.remove(pasajero);
usuariosConfirmados.add(pasajero);
} }
}
} }
package es.ujaen.dae.carpoolingdae.excepciones;
public class NoAceptaConductor extends RuntimeException {
public NoAceptaConductor() {
}
}
...@@ -17,7 +17,7 @@ import org.springframework.validation.annotation.Validated; ...@@ -17,7 +17,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.excepciones.PlazaNoDisponible; import es.ujaen.dae.carpoolingdae.excepciones.NoAceptaConductor;
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.excepciones.ViajeNoExistente; import es.ujaen.dae.carpoolingdae.excepciones.ViajeNoExistente;
...@@ -59,8 +59,11 @@ public class SistemaCarpooling { ...@@ -59,8 +59,11 @@ public class SistemaCarpooling {
* @param clave la clave de acceso * @param clave la clave de acceso
* @return el objeto de la clase Viaje asociado * @return el objeto de la clase Viaje asociado
*/ */
public Optional<Usuario> loginUsuario(@NotBlank String email, @NotBlank String clave) {
return Optional.ofNullable(usuarios.get(email)).filter((cliente) -> cliente.claveValida(clave)); public Usuario loginUsuario(@NotBlank String email, @NotBlank String clave) {
return Optional.ofNullable(usuarios.get(email))
.filter(cliente -> cliente.claveValida(clave))
.orElseThrow(UsuarioNoRegistrado::new);
} }
/** /**
...@@ -72,7 +75,7 @@ public class SistemaCarpooling { ...@@ -72,7 +75,7 @@ public class SistemaCarpooling {
* @return viajes encontrados con esos datos * @return viajes encontrados con esos datos
*/ */
public List<Viaje> buscarViajes(String origen, String destino, LocalDate fecha) { public List<Viaje> buscarViajes(@NotBlank String origen, @NotBlank String destino, @NotBlank LocalDate fecha) {
List<Viaje> viajesEncontrados = new ArrayList<>(); List<Viaje> viajesEncontrados = new ArrayList<>();
for (Viaje viaje : viajes.values()) { // Iterar sobre la colección de viajes for (Viaje viaje : viajes.values()) { // Iterar sobre la colección de viajes
if (viaje.getOrigen().equals(origen) && viaje.getDestino().equals(destino) if (viaje.getOrigen().equals(origen) && viaje.getDestino().equals(destino)
...@@ -86,41 +89,30 @@ public class SistemaCarpooling { ...@@ -86,41 +89,30 @@ public class SistemaCarpooling {
} }
public void agregarViaje(@NotBlank String dni, @NotNull @Valid Viaje viaje) { public void agregarViaje(@NotNull @Valid Usuario conductor, @NotNull @Valid Viaje viaje) {
// Verificar si el usuario conductor existe en la base de datos
Usuario conductor = usuarios.get(dni);
if (conductor == null) {
throw new UsuarioNoRegistrado();
}
// Asignar el conductor al viaje // Asignar el conductor al viaje
viaje.setConductor(conductor); viaje.setConductor(conductor);
// Agregar el viaje a la lista de viajes del conductor (si es necesario) // Llamar a la función en Usuario para agregar el viaje como conductor
conductor.getviajesComoConductor().add(viaje); conductor.agregarViajeComoConductor(viaje);
// Agregar el viaje al mapa de viajes // Agregar el viaje al mapa de viajes
viajes.put(String.valueOf(viaje.getId()), viaje); viajes.put(String.valueOf(viaje.getId()), viaje);
} }
/** /**
* Enviar solicitud para ser pasajero de un viaje * Enviar solicitud para ser pasajero de un viaje
* *
* @param viaje al que se envía la solicitud * @param viaje al que se envía la solicitud
*/ */
public void enviarSolicitudViaje(Viaje viaje, Usuario pasajero) { public void enviarSolicitudViaje(@NotNull @Valid Viaje viaje, @NotNull @Valid Usuario pasajero) {
if (viaje != null && !viaje.getUsuariosSolicitantes().contains(pasajero) && viaje.getPlazas() > 0) { // Envía la // Llamar a la función en Usuario para enviar la solicitud
// solicitud pasajero.enviarSolicitudParaSerPasajero(viaje);
// solo si
// hay
// plazas
// disponibles
viaje.getUsuariosSolicitantes().add(pasajero);// Agregar este usuario a la lista de solicitantes en el Viaje
} else {
throw new PlazaNoDisponible();
}
} }
/** /**
* Aceptar pasajero en un viaje * Aceptar pasajero en un viaje
* *
...@@ -128,13 +120,24 @@ public class SistemaCarpooling { ...@@ -128,13 +120,24 @@ public class SistemaCarpooling {
* @param pasajero que es aceptado en el viaje * @param pasajero que es aceptado en el viaje
*/ */
public void aceptarPasajero(@NotNull @Valid Viaje viaje, Usuario pasajero) {
if (viaje != null && viaje.getUsuariosSolicitantes().contains(pasajero)
&& pasajero.getviajesComoConductor().contains(viaje)) { // SOLO PUEDE ACEPTAR EL
// CONDUCTOR
viaje.getUsuariosSolicitantes().remove(pasajero);
viaje.getusuariosConfirmados().add(pasajero);
/* public void aceptarPasajero(@NotNull @Valid Viaje viaje, @NotNull @Valid Usuario pasajero) {
// Llamar a la función en Usuario para confirmar al pasajero
viaje.confirmarPasajero(pasajero);
// Reducir el número de plazas disponibles en el viaje
viaje.reducePlazasDisponibles(viaje);
} */
public void aceptarPasajero(@NotNull @Valid Usuario conductor, @NotNull @Valid Viaje viaje,
@NotNull @Valid Usuario pasajero) {
// Verifica si el viaje está en la lista de viajes del conductor
if (!conductor.getViajesComoConductor().contains(viaje)) {
throw new NoAceptaConductor();
} }
// Llamar a la función en Viaje para confirmar al pasajero
viaje.confirmarPasajero(pasajero);
} }
} }
\ No newline at end of file
package es.ujaen.dae.carpoolingdae.entidades; package es.ujaen.dae.carpoolingdae.entidades;
import java.util.List; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.assertj.core.api.Assertions; import java.time.LocalDate;
import java.time.LocalDateTime;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.MethodMode;
import es.ujaen.dae.carpoolingdae.excepciones.NoAceptaConductor;
import es.ujaen.dae.carpoolingdae.servicios.SistemaCarpooling;
public class ViajeTest { public class ViajeTest {
@Autowired
SistemaCarpooling sistemaCarpooling;
public ViajeTest() { public ViajeTest() {
} }
private Viaje viaje; /* //private Viaje viaje;
@Test @Test
void testAddPasajero() { void testAddPasajero() {
Usuario pasajero = new Usuario(); // Crea una instancia de Reserva adecuada para el test Usuario pasajero = new Usuario("12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"123456789",
"conductor@example.com",
"clave");
Viaje viaje = new Viaje(
12345,
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
viaje.addPasajero(pasajero); viaje.addPasajero(pasajero);
List<Usuario> usuariosConfirmados = viaje.getusuariosConfirmados(); assertTrue(viaje.getUsuariosConfirmados().contains(pasajero));
Assertions.assertThat(1).isEqualTo(usuariosConfirmados.size());
Assertions.assertThat(pasajero).isEqualTo(usuariosConfirmados.get(0));
} } */
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAceptarPasajero() {
// Crear un usuario conductor
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"123456789",
"conductor@example.com",
"clave");
// Crear un usuario pasajero
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"987654321",
"pasajero@example.com",
"clave");
// Crear un viaje
Viaje viaje = new Viaje(
12345,
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
viaje.setConductor(conductor);
// Agregar el viaje al sistema
sistemaCarpooling.agregarViaje(conductor, viaje);
// Enviar solicitud de viaje
sistemaCarpooling.enviarSolicitudViaje(viaje, pasajero);
// Aceptar al pasajero en el viaje llamando a la función en Viaje
try {
viaje.confirmarPasajero(pasajero);
} catch (NoAceptaConductor e) {
// Manejar la excepción si el conductor no es el correcto (opcional)
e.printStackTrace();
}
// Verificar que el pasajero está en la lista de usuarios confirmados en el viaje
assertTrue(viaje.usuariosConfirmados.contains(pasajero));
// Verificar que el pasajero ya no está en la lista de solicitantes del viaje
assertFalse(viaje.usuariosSolicitantes.contains(pasajero));
}
} }
...@@ -9,16 +9,19 @@ import java.time.LocalDateTime; ...@@ -9,16 +9,19 @@ import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
import java.util.Set;
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 org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.MethodMode; import org.springframework.test.annotation.DirtiesContext.MethodMode;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import es.ujaen.dae.carpoolingdae.entidades.Usuario; import es.ujaen.dae.carpoolingdae.entidades.Usuario;
//import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5; //import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5;
...@@ -44,9 +47,9 @@ public class SistemaCarpoolingTest { ...@@ -44,9 +47,9 @@ public class SistemaCarpoolingTest {
} }
@Test @Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD) void testValidacionUsuario() {
public void testAltaUsuarioInvalido() {
String clave = "mariahm"; String clave = "mariahm";
Usuario usuario = new Usuario( Usuario usuario = new Usuario(
"22334455H", "22334455H",
"María", "María",
...@@ -55,14 +58,28 @@ public class SistemaCarpoolingTest { ...@@ -55,14 +58,28 @@ public class SistemaCarpoolingTest {
"189273810", "189273810",
"mhm@red.ujaen.es", "mhm@red.ujaen.es",
clave); clave);
Assertions.assertThatThrownBy(() -> { Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
sistemaCarpooling.altaUsuario(usuario); Set<ConstraintViolation<Usuario>> violations = validator.validate(usuario);
}).isInstanceOf(ConstraintViolationException.class);
Assertions.assertThat(violations).isEmpty();
} }
// Damos de alta el usuario @Test
void testComprobacionClave() {
String clave = "mariahm";
Usuario usuario = new Usuario(
"22334455H",
"María",
"Hidalgo Morcillo",
LocalDate.of(1990, 11, 1),
"189273810",
"mhm@red.ujaen.es",
clave);
Assertions.assertThat(usuario.claveValida(clave)).isTrue();
}
@Test @Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD) @DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAltaYLoginUsuario() { public void testAltaYLoginUsuario() {
...@@ -77,7 +94,7 @@ public class SistemaCarpoolingTest { ...@@ -77,7 +94,7 @@ public class SistemaCarpoolingTest {
clave); clave);
// Cuenta cuenta = servicioUjaCoin.altaCliente(cliente); // Cuenta cuenta = servicioUjaCoin.altaCliente(cliente);
Optional<Usuario> usuarioLogin = sistemaCarpooling.loginUsuario(usuario.getEmail(), "clave"); List <Usuario> usuarioLogin = sistemaCarpooling.loginUsuario(usuario.getEmail(), "clave");
Assertions.assertThat(usuarioLogin.isPresent()).isTrue(); Assertions.assertThat(usuarioLogin.isPresent()).isTrue();
Assertions.assertThat(usuarioLogin.get()).isEqualTo(usuario); Assertions.assertThat(usuarioLogin.get()).isEqualTo(usuario);
...@@ -199,53 +216,6 @@ public class SistemaCarpoolingTest { ...@@ -199,53 +216,6 @@ public class SistemaCarpoolingTest {
assertTrue(viaje.getUsuariosSolicitantes().contains(pasajero)); assertTrue(viaje.getUsuariosSolicitantes().contains(pasajero));
} }
@Test
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD)
public void testAceptarPasajero() {
// Crear un usuario conductor
Usuario conductor = new Usuario(
"12345678A",
"Conductor",
"Apellido",
LocalDate.of(1990, 1, 1),
"123456789",
"conductor@example.com",
"clave");
// Crear un usuario pasajero
Usuario pasajero = new Usuario(
"87654321B",
"Pasajero",
"Apellido",
LocalDate.of(1995, 5, 5),
"987654321",
"pasajero@example.com",
"clave");
// Crear un viaje
Viaje viaje = new Viaje(
12345,
"Origen",
"Destino",
LocalDateTime.of(2023, 9, 30, 8, 0),
2,
50.0);
viaje.setConductor(conductor);
// Agregar el viaje al sistema
sistemaCarpooling.agregarViaje(conductor.getDni(), viaje);
// Enviar solicitud de viaje
sistemaCarpooling.enviarSolicitudViaje(viaje, pasajero);
// Aceptar al pasajero en el viaje
sistemaCarpooling.aceptarPasajero(viaje, pasajero);
// Verificar que el pasajero está en la lista de usuarios confirmados en el
// viaje
assertTrue(viaje.getusuariosConfirmados().contains(pasajero));
// Verificar que el pasajero ya no está en la lista de solicitantes del viaje
assertFalse(viaje.getUsuariosSolicitantes().contains(pasajero));
}
} }
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