Modificaciones necesarias

parent 07ff0693
......@@ -15,7 +15,7 @@ import java.text.SimpleDateFormat;
public class CarPoolingAorAhaApplication {
public static void main(String[] args) {
SpringApplication.run(CarPoolingAorAhaApplication.class, args);
SistemaCarPooling sis = new SistemaCarPooling();
/*SistemaCarPooling sis = new SistemaCarPooling();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date yourDate = null;
try {
......@@ -25,7 +25,7 @@ public class CarPoolingAorAhaApplication {
}
Usuario usuario = new Usuario("Alvaro", "Alonso", yourDate, "78162640S", 670988953, "aor00039@red.ujaen.es", "hola", Usuario.Rol.PASAJERO, sis);
ServicioCarPooling servicioCarPooling = new ServicioCarPooling();
servicioCarPooling.insertarUsuario(usuario);
servicioCarPooling.insertarUsuario(usuario);*/
}
......
......@@ -17,6 +17,8 @@ import static com.carpooling.carpoolingaoraha.entidades.Usuario.*;
@Entity
@Table(name = "solicitudes")
public class Solicitud {
@Transient
private static int incrementaReserva = 0;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
......@@ -35,6 +37,7 @@ public class Solicitud {
}
// Constructores, getters y setters
public Solicitud(Reserva reserva, Usuario pasajero) {
this.id = (long) incrementaReserva++;
this.reserva = reserva;
this.pasajero = pasajero;
}
......
......@@ -65,7 +65,7 @@ public class Usuario {
private ArrayList<Integer> viajesOfertados;
@Max(5)
double puntuacionMedia;
private double puntuacionMedia;
@OneToMany(mappedBy = "pasajero", cascade = CascadeType.ALL)
private List<Solicitud> solicitudesPendientes;
......@@ -185,6 +185,8 @@ public class Usuario {
this.rol = Rol.AMBOS;
}
public boolean ofrecerViaje(String origen, String destino, Date fechaSalida, int nAsientos, int precioAsiento){
if(this.rol == Rol.CONDUCTOR || this.rol == Rol.AMBOS) {
//Crea una reserva
......
package com.carpooling.carpoolingaoraha.repositorios;
import com.carpooling.carpoolingaoraha.entidades.Solicitud;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
@Repository
@Transactional(propagation = Propagation.REQUIRED)
public class SolicitudRepository{
@PersistenceContext
EntityManager em;
@Cacheable("solicitudes")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public Optional<Solicitud> buscar(Long id){
return Optional.ofNullable(em.find(Solicitud.class, id));
}
@CacheEvict(value = "solicitudes", key = "#solicitud.id")
public void guardar(Solicitud S){
em.persist(S);
}
@CacheEvict(value = "solicitudes", key = "#solicitud.id")
public void actualizar(Solicitud u){
em.merge(u);
}
}
\ No newline at end of file
......@@ -31,6 +31,12 @@ public class UsuarioRepository {
return Optional.ofNullable(em.find(Usuario.class, DNI));
}
@Cacheable("usuarios")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public Optional<Usuario> buscarEmail(String email){
return Optional.ofNullable(em.find(Usuario.class, email));
}
@CacheEvict(value = "usuarios", key = "#usuario.DNI")
public void guardar(Usuario usuario){
em.persist(usuario);
......
......@@ -21,7 +21,7 @@ public class ViajeRepository{
@Cacheable("viajes")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public Optional<Viaje> buscar(String idReserva){
public Optional<Viaje> buscar(int idReserva){
return Optional.ofNullable(em.find(Viaje.class, idReserva));
}
......@@ -30,7 +30,7 @@ public class ViajeRepository{
em.persist(viaje);
}
@CacheEvict(value = "viajes", key = "#viaje.DNI")
@CacheEvict(value = "viajes", key = "#viaje.idViaje")
public void actualizar(Viaje u){
em.merge(u);
}
......
package com.carpooling.carpoolingaoraha.services;
import com.carpooling.carpoolingaoraha.entidades.Reserva;
import com.carpooling.carpoolingaoraha.entidades.Solicitud;
import com.carpooling.carpoolingaoraha.entidades.Usuario;
import com.carpooling.carpoolingaoraha.excepciones.ReservaNoRegistrada;
import com.carpooling.carpoolingaoraha.excepciones.UsuarioNoRegistrado;
import com.carpooling.carpoolingaoraha.excepciones.UsuarioYaRegistrado;
import com.carpooling.carpoolingaoraha.entidades.Viaje;
import com.carpooling.carpoolingaoraha.excepciones.*;
import com.carpooling.carpoolingaoraha.repositorios.ReservaRepository;
import com.carpooling.carpoolingaoraha.repositorios.UsuarioRepository;
import com.carpooling.carpoolingaoraha.repositorios.ViajeRepository;
......@@ -51,14 +51,71 @@ public class ServicioCarPooling {
return usuario;
}
public void insertarUsuario(@NotNull @Valid Usuario u){
repositorioUsuario.guardar(u);
public Usuario modificarDatosUsuario(@NotNull @Valid Usuario usuarioModificado) {
// Buscar el usuario existente por su DNI
Optional<Usuario> usuarioExistente = repositorioUsuario.buscar(usuarioModificado.getDNI());
if (usuarioExistente.isPresent()) {
Usuario usuarioActual = usuarioExistente.get();
// Modificar los campos deseados
usuarioActual.setNombre(usuarioModificado.getNombre());
usuarioActual.setApellidos(usuarioModificado.getApellidos());
usuarioActual.setTelefono(usuarioModificado.getTelefono());
usuarioActual.setEmail(usuarioModificado.getEmail());
usuarioActual.setDNI(usuarioModificado.getDNI());
// Añade más campos según sea necesario
// Guardar el usuario actualizado
repositorioUsuario.actualizar(usuarioActual);
return usuarioActual;
} else {
// Si no se encuentra el usuario, podrías lanzar una excepción o manejarlo de otra manera según tus necesidades.
throw new UsuarioNoRegistrado();
}
}
public Viaje modificarDatosViaje(@NotNull @Valid Viaje viajeModificado) {
// Buscar el viaje existente por su ID
Optional<Viaje> viajeExistente = repositorioViajes.buscar(viajeModificado.getIdViaje());
if (viajeExistente.isPresent()) {
Viaje viajeActual = viajeExistente.get();
// Modificar los campos deseados
viajeActual.setOrigen(viajeModificado.getOrigen());
viajeActual.setDestino(viajeModificado.getDestino());
viajeActual.setFechaSalida(viajeModificado.getFechaSalida());
viajeActual.setnAsientos(viajeModificado.getnAsientos());
viajeActual.setPrecioAsiento(viajeModificado.getPrecioAsiento());
// Añade más campos según sea necesario
// Guardar el viaje actualizado
repositorioViajes.actualizar(viajeActual);
return viajeActual;
} else {
// Si no se encuentra el viaje, podrías lanzar una excepción o manejarlo de otra manera según tus necesidades.
throw new ViajeNoRegistrado();
}
}
public Viaje altaViaje(@NotNull @Valid Viaje v) {
Optional<Viaje> test = repositorioViajes.buscar(v.getIdViaje());
if (test.isPresent()) {
throw new ViajeYaRegistrado();
}
repositorioViajes.guardar(v);
return v;
}
@Transactional
public Optional<Usuario> loginUsuario(@NotBlank String dni, @NotBlank String clave) {
Optional<Usuario> usuarioLogin = repositorioUsuario.buscar(dni)
.filter((usuario) -> usuario.claveValida(clave));
public Optional<Usuario> loginUsuario(@NotNull @Valid Usuario usuariop) {
Optional<Usuario> usuarioLogin = repositorioUsuario.buscar(usuariop.getDNI()).filter((usuario) -> usuario.claveValida(usuariop.getClaveAcceso()));
// Asegurarnos de que se devuelve el cliente con los datos precargados
//usuarioLogin.ifPresent(u -> u.verCuentas().size());
......
package com.carpooling.carpoolingaoraha.utils;
import org.aspectj.weaver.bcel.BcelAnnotation;
import org.springframework.cache.Cache;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
public class CachedBCryptPasswordEncoder extends BCryptPasswordEncoder {
Cache cache;
public CachedBCryptPasswordEncoder(Cache cache) {
super();
this.cache = cache;
}
public CachedBCryptPasswordEncoder(Cache cache, int strength) {
super(strength);
this.cache = cache;
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
CharSequence cachedMatch = cache.get(encodedPassword, CharSequence.class);
if (cachedMatch != null && cachedMatch.equals(rawPassword)) {
return true;
}
boolean result = super.matches(rawPassword, encodedPassword);
if (result == true) {
cache.put(encodedPassword, rawPassword);
}
return result;
}
}
......@@ -3,3 +3,4 @@ spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.profiles.active=test
spring.jpa.properties.javax.persistence.schema-generation.database.action: drop-and-create
package com.carpooling.carpoolingaoraha.repositorios;
import com.carpooling.carpoolingaoraha.entidades.Reserva;
import com.carpooling.carpoolingaoraha.entidades.Usuario;
import org.springframework.transaction.annotation.Transactional;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Propagation;
import java.util.Optional;
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class ReservaRepositoryTest {
@Autowired(required = true)
private ReservaRepository repositorio;
@Test
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void testInsertReserva(){
Reserva reserva = new Reserva();
reserva.setNumPasajeros(2);
reserva.setIdReserva(1);
repositorio.guardar(reserva);
Optional<Reserva> reservaGuardada = repositorio.buscar(1);
Assert.assertNotNull(reservaGuardada);
Assert.assertEquals(2,reservaGuardada.get().getNumPasajeros());
Assert.assertEquals(1,reservaGuardada.get().getIdReserva());
}
}
package com.carpooling.carpoolingaoraha.repositorios;
import com.carpooling.carpoolingaoraha.entidades.Usuario;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class UsuarioRepositoryTest {
@Autowired(required = true)
private UsuarioRepository repositorio;
@Test
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void testInsertUsuario(){
Usuario usuario = new Usuario();
usuario.setNombre("Fran");
usuario.setDNI("45678900E");
repositorio.guardar(usuario);
Optional<Usuario> usuarioGuardado = repositorio.buscar("45678900E");
Assert.assertNotNull(usuarioGuardado);
Assert.assertEquals("Fran", usuarioGuardado.get().getNombre());
Assert.assertEquals("45678900E", usuarioGuardado.get().getDNI());
}
}
package com.carpooling.carpoolingaoraha.repositorios;
import com.carpooling.carpoolingaoraha.entidades.Usuario;
import com.carpooling.carpoolingaoraha.entidades.Viaje;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class ViajeRepositoryTest {
@Autowired(required = true)
private ViajeRepository repository;
@Test
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void testInsertViaje(){
Viaje viaje = new Viaje();
viaje.setDestino("Canarias");
int idViaje = 1;
viaje.setIdViaje(idViaje);
repository.guardar(viaje);
Optional<Viaje> viajeGuardado = repository.buscar(String.valueOf(idViaje));
Assert.assertNotNull(viajeGuardado);
Assert.assertEquals(idViaje, viajeGuardado.get().getIdViaje());
Assert.assertEquals("Canarias", viajeGuardado.get().getDestino());
}
}
......@@ -2,13 +2,23 @@ package com.carpooling.carpoolingaoraha.services;
import com.carpooling.carpoolingaoraha.entidades.SistemaCarPooling;
import com.carpooling.carpoolingaoraha.entidades.Usuario.*;
import com.carpooling.carpoolingaoraha.entidades.Usuario;
import com.carpooling.carpoolingaoraha.repositorios.ReservaRepository;
import com.carpooling.carpoolingaoraha.repositorios.UsuarioRepository;
import org.assertj.core.api.Assertions;
import org.junit.Assert;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.validation.ConstraintViolationException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Optional;
import java.util.Random;
import static org.junit.Assert.*;
import static org.junit.jupiter.api.Assertions.assertTrue;
@SpringBootTest(classes =com.carpooling.carpoolingaoraha.CarPoolingAorAhaApplication.class)
......@@ -17,12 +27,196 @@ public class ServicioCarPoolingTest
@Autowired
ServicioCarPooling servicio;
int idReserva = 24;
@Test
public void testAltaUsuario() throws ParseException {
int length = 9;
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
// Inicializar el generador de números aleatorios
Random random = new Random();
StringBuilder sb = new StringBuilder(length);
// Generar la cadena aleatoria
for (int i = 0; i < length; i++) {
int randomIndex = random.nextInt(characters.length());
char randomChar = characters.charAt(randomIndex);
sb.append(randomChar);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SistemaCarPooling sis = new SistemaCarPooling();
java.util.Date yourDate = sdf.parse("1992-07-26");
Usuario usuario = new Usuario("Alvaro", "Alonso", yourDate, "78162640S", 670988953, "aor00039@red.ujaen.es", "hola", Rol.PASAJERO, sis);
Usuario usuario = new Usuario("Perico", "Alonso", yourDate, sb.toString(), 670988953, "aor00039@red.ujaen.es", "hola", Rol.PASAJERO, sis);
Usuario usuarioGuardado = servicio.altaCliente(usuario);
assertNotNull(usuarioGuardado);
// Validar propiedades específicas del usuario guardado
assertEquals("Perico", usuarioGuardado.getNombre());
assertEquals("Alonso", usuarioGuardado.getApellidos());
assertEquals(sb.toString(), usuarioGuardado.getDNI());
assertEquals(670988953, usuarioGuardado.getTelefono());
assertEquals("aor00039@red.ujaen.es", usuarioGuardado.getEmail());
assertEquals("hola", usuarioGuardado.getClaveAcceso());
assertEquals(Rol.PASAJERO, usuarioGuardado.getRol());
// Validar que la fecha de nacimiento es la esperada
SimpleDateFormat tt = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date expectedDate = tt.parse("1992-07-26");
assertEquals(expectedDate, usuarioGuardado.getFNac());
}
@Test
public void testModificarDatosUsuario() throws ParseException {
// Crear un usuario para modificar
int length = 9;
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
int randomIndex = random.nextInt(characters.length());
char randomChar = characters.charAt(randomIndex);
sb.append(randomChar);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date yourDate = sdf.parse("1992-07-26");
Usuario usuario = new Usuario("Perico", "Alonso", yourDate, sb.toString(), 670988953, "aor00039@red.ujaen.es", "hola", Rol.PASAJERO, new SistemaCarPooling());
servicio.altaCliente(usuario);
// Modificar los datos del usuario
usuario.setNombre("NuevoNombre");
usuario.setApellidos("NuevosApellidos");
usuario.setTelefono(123456789);
usuario.setEmail("nuevoemail@example.com");
Usuario usuarioModificado = servicio.modificarDatosUsuario(usuario);
assertNotNull(usuarioModificado);
// Validar que los datos se han modificado correctamente
assertEquals("NuevoNombre", usuarioModificado.getNombre());
assertEquals("NuevosApellidos", usuarioModificado.getApellidos());
assertEquals(123456789, usuarioModificado.getTelefono());
assertEquals("nuevoemail@example.com", usuarioModificado.getEmail());
}
/*@Test
public void testLoginUsuario() throws ParseException {
int length = 9;
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
// Inicializar el generador de números aleatorios
Random random = new Random();
StringBuilder sb = new StringBuilder(length);
// Generar la cadena aleatoria
for (int i = 0; i < length; i++) {
int randomIndex = random.nextInt(characters.length());
char randomChar = characters.charAt(randomIndex);
sb.append(randomChar);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SistemaCarPooling sis = new SistemaCarPooling();
java.util.Date yourDate = sdf.parse("1992-07-26");
Usuario usuario = new Usuario("Ordin", "Alonso", yourDate, sb.toString(), 670988953, "aor00039@red.ujaen.es", "hola", Rol.PASAJERO, sis);
Usuario usuarioGuardado = servicio.altaCliente(usuario);
Optional<Usuario> usuario1 = servicio.loginUsuario(usuarioGuardado);
Assertions.assertThat(usuario1.isPresent()).isTrue();
}*/
@Test
public void testAltaViaje() throws ParseException {
Random r = new Random();
int idReserva = r.nextInt(10000000);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SistemaCarPooling sis = new SistemaCarPooling();
java.util.Date yourDate = sdf.parse("2025-12-03");
Viaje v = new Viaje("origen", "destino", yourDate, 3, 20, idReserva);
Viaje viajePrueba = servicio.altaViaje(v);
assertNotNull(viajePrueba);
// Validar propiedades específicas del viaje guardado
assertEquals("origen", viajePrueba.getOrigen());
assertEquals("destino", viajePrueba.getDestino());
// Validar que la fecha del viaje es la esperada
SimpleDateFormat oo = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date expectedDate = oo.parse("2025-12-03");
assertEquals(expectedDate, viajePrueba.getFechaSalida());
assertEquals(3, viajePrueba.getnAsientos());
assertEquals(20, viajePrueba.getPrecioAsiento());
assertEquals(idReserva, viajePrueba.getIdViaje());
}
@Test
public void testModificarDatosViaje() throws ParseException {
// Crear un viaje para ser modificado
Random r = new Random();
int idViaje = r.nextInt(10000000);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date yourDate = sdf.parse("2025-12-03");
Viaje viajeOriginal = new Viaje("origenOriginal", "destinoOriginal", yourDate, 3, 20, idViaje);
servicio.altaViaje(viajeOriginal);
// Crear un nuevo viaje con los datos modificados
Viaje viajeModificado = new Viaje("origenModificado", "destinoModificado", yourDate, 5, 25, idViaje);
// Modificar el viaje y obtener el resultado
Viaje viajeActualizado = servicio.modificarDatosViaje(viajeModificado);
// Verificar que el viaje actualizado no es nulo
assertNotNull(viajeActualizado);
// Verificar que las propiedades específicas del viaje se han modificado correctamente
assertEquals("origenModificado", viajeActualizado.getOrigen());
assertEquals("destinoModificado", viajeActualizado.getDestino());
assertEquals(5, viajeActualizado.getnAsientos());
assertEquals(25, viajeActualizado.getPrecioAsiento());
assertEquals(idViaje, viajeActualizado.getIdViaje());
}
@Test
public void testCrearReservaUsuarioRegistrado() {
String dni = "12345678F";
Usuario usuario = new Usuario();
usuario.setDNI(dni);
servicio.altaCliente(usuario);
Reserva reserva = servicio.crearReserva(dni);
assertNotNull(reserva);
}
@Test
public void testCrearSolicitud()
{
String dni = "12345778F";
Usuario usuario = new Usuario();
usuario.setDNI(dni);
servicio.altaCliente(usuario);
Reserva reserva = servicio.crearReserva(dni);
Solicitud s = servicio.crearSolicitud(dni, reserva.getIdReserva());
assertNotNull(s);
}
}
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