Eliminación clase SistemaCarPooling.java

parent 27504b79
package com.carpooling.carpoolingaoraha;
import com.carpooling.carpoolingaoraha.entidades.SistemaCarPooling;
import com.carpooling.carpoolingaoraha.entidades.Usuario;
import com.carpooling.carpoolingaoraha.services.ServicioCarPooling;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@SpringBootApplication(scanBasePackages = {
"com.carpooling.carpoolingaoraha.services",
"com.carpooling.carpoolingaoraha.repositorios",
......
......@@ -8,6 +8,7 @@ import java.util.List;
import com.carpooling.carpoolingaoraha.entidades.*;
import com.carpooling.carpoolingaoraha.services.ServicioCarPooling;
import jakarta.persistence.*;
import javax.validation.constraints.Max;
......@@ -41,7 +42,7 @@ public class Reserva {
@JoinColumn(name="idReserva")
private Viaje viaje;
@Transient
SistemaCarPooling sistema;
ServicioCarPooling sistema;
public Reserva(){
this.pasajeros = new ArrayList<String>();
......@@ -51,9 +52,8 @@ public class Reserva {
this.idReserva = ++incrementaReserva;
this.numPasajeros = nAsientos;
this.viaje = new Viaje(origen, destino, fechaSalida, nAsientos, precioAsiento, this.idReserva);
this.sistema = new SistemaCarPooling();
this.sistema.addViaje(this.viaje);
this.sistema.addReserva(this);
sistema.altaViaje(this.viaje);
sistema.crearReserva(conductor.getDNI(), this);
this.puntuacion = 0;
this.pasajeros = new ArrayList<String>();
this.reservaConcluida = false;
......@@ -61,7 +61,7 @@ public class Reserva {
}
public void anadirReserva(Reserva res){
this.sistema.getReservas().add(res);
this.sistema.listarReservas().add(res);
}
......
package com.carpooling.carpoolingaoraha.entidades;
import java.util.ArrayList;
import java.util.List;
public class SistemaCarPooling {
private String nombre;
private List<Viaje> listadoViajes;
private List<Usuario> listadoUsuarios;
private List<Reserva> listadoReservas;
private List<Viaje> viajesRealizados;
/*public SistemaCarPooling() {
this.nombre = "Blablacar";
this.listadoViajes = new ArrayList<>();
this.listadoUsuarios = new ArrayList<>();
this.listadoReservas = new ArrayList<>();
this.viajesRealizados = new ArrayList<>();
}*/
public SistemaCarPooling() {
this.nombre = "Blablacar";
this.listadoViajes = new ArrayList<>();
Viaje v = new Viaje();
this.listadoViajes.add(v);
this.listadoUsuarios = new ArrayList<>();
Usuario u = new Usuario();
this.listadoUsuarios.add(u);
this.listadoReservas = new ArrayList<>();
Reserva r = new Reserva();
this.listadoReservas.add(r);
this.viajesRealizados = new ArrayList<>();
Viaje k = new Viaje();
this.listadoViajes.add(k);
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public List<Viaje> getViajes() {
return listadoViajes;
}
public List<Usuario> getUsuarios() {
return listadoUsuarios;
}
public void addViaje(Viaje viaje){
listadoViajes.add(viaje);
}
public void addReserva(Reserva res){
listadoReservas.add(res);
}
public List<Reserva> getReservas() {
return listadoReservas;
}
/*public boolean login(String email, String claveAcceso) {
List<Usuario> usuariosRegistrados = usuarios;
for (Usuario usuario : usuariosRegistrados) {
if (usuario.getEmail().equals(email) && usuario.getClaveAcceso().equals(claveAcceso)) {
return true; // Coinciden las credenciales, el inicio de sesión es exitoso
}
}
// 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;
}
}
......@@ -3,6 +3,7 @@ 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.services.ServicioCarPooling;
import com.carpooling.carpoolingaoraha.utils.ExprReg;
import jakarta.persistence.*;
import org.antlr.v4.runtime.misc.NotNull;
......@@ -239,9 +240,9 @@ public class Usuario {
public boolean asignarPuntuacion(int idReserva, String DNI, int puntuacion){
if(puntuacion <= 5) {
for (int i = 0; i < this.sistemaCarPooling.getReservas().size(); i++) {
if (idReserva == this.sistemaCarPooling.getReservas().get(i).getIdReserva() && this.sistemaCarPooling.getReservas().get(i).esViajero(DNI)) {
this.sistemaCarPooling.getReservas().get(i).anadirPuntuacion(puntuacion);
for (int i = 0; i < servicioCarPooling.listarReservas().size(); i++) {
if (idReserva == this.servicioCarPooling.listarReservas().get(i).getIdReserva() && this.servicioCarPooling.listarReservas().get(i).esViajero(DNI)) {
this.servicioCarPooling.listarReservas().get(i).anadirPuntuacion(puntuacion);
}
}
return true;
......@@ -268,7 +269,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()) {
for (Reserva reserva : servicioCarPooling.listarReservas()) {
if (viajesDisponibles.contains(reserva.getViaje())) {
reservasAsociadas.add(reserva);
}
......@@ -309,7 +310,7 @@ public class Usuario {
public boolean solicitarViaje(int idReserva, Rol rol) {
if (rol == Rol.PASAJERO || rol == Rol.AMBOS) {
for (Reserva reserva : sistemaCarPooling.getReservas()) {
for (Reserva reserva : servicioCarPooling.listarReservas()) {
if (idReserva == reserva.getIdReserva() && !reserva.getReservaConcluida()) {
// Verificar si ya hay una solicitud pendiente para esta reserva
if (!tieneSolicitudPendiente(reserva)) {
......@@ -333,7 +334,7 @@ public class Usuario {
public boolean solicitarViaje(int idReserva, Solicitud s) {
if (rol == Rol.PASAJERO || rol == Rol.AMBOS) {
for (Reserva reserva : sistemaCarPooling.getReservas()) {
for (Reserva reserva : servicioCarPooling.listarReservas()) {
if (idReserva == reserva.getIdReserva() && !reserva.getReservaConcluida()) {
// Verificar si ya hay una solicitud pendiente para esta reserva
if (!tieneSolicitudPendiente(reserva)) {
......@@ -383,9 +384,6 @@ public class Usuario {
return historicoSolicitudes;
}
public SistemaCarPooling getSistemaCarPooling() {
return sistemaCarPooling;
}
public void setPuntuacion(ArrayList<Double> puntuacion) {
this.puntuacion = puntuacion;
......
......@@ -11,6 +11,7 @@ import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
@Repository
......@@ -53,4 +54,10 @@ public class ReservaRepository {
em.remove(reserva);
}
}
@Cacheable("reservas")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public List<Reserva> obtenerTodosLosReservas() {
return em.createQuery("SELECT r FROM Reserva r", Reserva.class).getResultList();
}
}
......@@ -68,11 +68,12 @@ public class ControladorREST {
@PutMapping("/usuarios/modificar/{dni}")
ResponseEntity<DTOUsuario> actualizarCliente(
@PathVariable String dni,
@RequestBody String nombre
@RequestBody Usuario usuarioModificado
) {
Optional<Usuario> usuarioExistente = servicioCarPooling.verUsuario(dni);
return usuarioExistente.map(usuario -> {
usuario.setNombre(nombre);
usuario.setNombre(usuarioModificado.getNombre());
usuario.setApellidos(usuarioModificado.getApellidos());
servicioCarPooling.modificarDatosUsuario(usuario);
return ResponseEntity.ok(new DTOUsuario(usuario));
}).orElse(ResponseEntity.notFound().build());
......@@ -134,14 +135,10 @@ public class ControladorREST {
* Modificar datos de un viaje
*/
@PutMapping("/viajes/actualizarViaje/{id}")
public ResponseEntity<Viaje> actualizarViaje(@PathVariable int id, @RequestBody Viaje viajeActualizado) {
public ResponseEntity<Viaje> actualizarViaje(@PathVariable int id, @RequestBody String origen) {
Optional<Viaje> viajeExistente = servicioCarPooling.verViaje(id);
return viajeExistente.map(viaje -> {
viaje.setOrigen(viajeActualizado.getOrigen());
viaje.setDestino(viajeActualizado.getDestino());
viaje.setFechaSalida(viajeActualizado.getFechaSalida());
viaje.setnAsientos(viajeActualizado.getnAsientos());
viaje.setPrecioAsiento(viajeActualizado.getPrecioAsiento());
viaje.setOrigen(origen);
Viaje viajeModificado = servicioCarPooling.modificarDatosViaje(viaje);
return ResponseEntity.ok(viajeModificado);
......@@ -152,7 +149,7 @@ public class ControladorREST {
@PostMapping("/reservas/crearReserva/{dni}")
public ResponseEntity<Reserva> crearReserva(@PathVariable String dni) {
try {
servicioCarPooling.crearReserva(dni);
servicioCarPooling.crearReserva(dni, new Reserva());
return ResponseEntity.status(HttpStatus.CREATED).build();
} catch (UsuarioYaRegistrado e) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
......
package com.carpooling.carpoolingaoraha.rest.dto;
import com.carpooling.carpoolingaoraha.entidades.SistemaCarPooling;
import com.carpooling.carpoolingaoraha.entidades.Solicitud;
import com.carpooling.carpoolingaoraha.entidades.Usuario;
import java.util.Date;
import java.util.List;
import java.util.Objects;
public record DTOUsuario (String nombre, String apellidos, Date FNac, String DNI, int telefono, String email, String claveAcceso, Usuario.Rol rol){
......
......@@ -3,8 +3,6 @@ package com.carpooling.carpoolingaoraha.rest.dto;
import java.util.Date;
import java.util.Objects;
import com.carpooling.carpoolingaoraha.entidades.SistemaCarPooling;
import com.carpooling.carpoolingaoraha.entidades.Viaje;
public record DTOViaje(
......
......@@ -134,11 +134,9 @@ public class ServicioCarPooling {
}
@CacheEvict(value="usuarios", key = "#dni")
public Reserva crearReserva(@NotBlank String dni) {
public Reserva crearReserva(@NotBlank String dni, @NotNull Reserva reserva) {
Usuario usuario = repositorioUsuario.buscar(dni).orElseThrow(UsuarioNoRegistrado::new);
Reserva reserva = new Reserva();
usuario.setRol(CONDUCTOR);
usuario.ofrecerViaje(reserva);
repositorioReservas.guardar(reserva);
......@@ -261,4 +259,13 @@ public class ServicioCarPooling {
return solicitud;
}
@Transactional
public List<Reserva> listarReservas() {
List<Reserva> reservas = repositorioReservas.obtenerTodosLosReservas();
if (reservas == null)
throw new ReservaNoRegistrada();
return reservas;
}
}
......@@ -4,6 +4,8 @@ import com.carpooling.carpoolingaoraha.entidades.*;
import com.carpooling.carpoolingaoraha.rest.dto.DTOReserva;
import com.carpooling.carpoolingaoraha.rest.dto.DTOSolicitud;
import com.carpooling.carpoolingaoraha.rest.dto.DTOUsuario;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.HttpHeaders;
import java.time.LocalDate;
......@@ -98,10 +100,14 @@ public class ControladorRESTTEST {
// Verificar que la creación del usuario fue exitosa
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.CREATED);
String nombre = "Hamilton";
// Crear un objeto ActualizarUsuarioRequest con los parámetros a enviar
Usuario usuarioModificado = new Usuario();
usuarioModificado.setNombre("Lewis");
usuarioModificado.setApellidos("Hamilton");
// Enviar la solicitud con datos en el cuerpo como JSON
ResponseEntity<DTOUsuario> respuestaA = restTemplate.exchange(
"/usuarios/modificar/{dni}", HttpMethod.PUT, new HttpEntity<>(nombre), DTOUsuario.class, dni
"/usuarios/modificar/{dni}", HttpMethod.PUT, new HttpEntity<>(usuarioModificado), DTOUsuario.class, dni
);
// Verificar que la respuesta sea OK, ya que se supone que el usuario existe en la base de datos
......@@ -109,16 +115,31 @@ public class ControladorRESTTEST {
}
@Test
public void testEliminarUsuario(){
// Datos de prueba
String dni = "78162640S";
// Realizar la solicitud DELETE para eliminar el usuario
restTemplate.delete("/usuarios/borrarUsuario/{dni}", dni);
ResponseEntity<DTOUsuario> respuesta = restTemplate.getForEntity("/usuarios/", DTOUsuario.class, dni);
String dni = "78362640S";
Date fecha = new Date(2000, 12, 1);
DTOUsuario usuario = new DTOUsuario("Fernando", "Alonso Diaz",fecha, "78362640S", 670988953, "hola@gmail.com", "1234", Usuario.Rol.CONDUCTOR);
ResponseEntity<DTOUsuario> respuesta = restTemplate.postForEntity
(
"/usuarios", usuario, DTOUsuario.class
);
// Realizar la solicitud GET con parámetros de ruta
ResponseEntity<DTOUsuario> respuestaS = restTemplate.exchange("/usuarios/mostrarUsuario/"+dni, HttpMethod.GET, null, DTOUsuario.class, dni);
// lo encuentra porque existe ese DNI en la BBDD
Assertions.assertThat(respuestaS.getStatusCode()).isEqualTo(HttpStatus.OK);
restTemplate.delete("/usuarios/borrarUsuario/" + dni, dni);
ResponseEntity<DTOUsuario> respuesta3 = restTemplate.getForEntity("/usuarios/", DTOUsuario.class, dni);
// Verificar que la respuesta sea un error 404 Not Found
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
Assertions.assertThat(respuesta3.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
......@@ -138,37 +159,58 @@ public class ControladorRESTTEST {
void testVerViajePorId() {
// Datos de prueba
int idViaje = 1; // Debes adaptar esto según tus datos de prueba
Date fecha = new Date(2024, 12, 1);
DTOViaje viaje = new DTOViaje("Origen", "destino", fecha, 4, 10, idViaje);
ResponseEntity<DTOViaje> respuesta = restTemplate.postForEntity("/viajes", viaje, DTOViaje.class);
// Realizar la solicitud GET para obtener un viaje por su ID
ResponseEntity<Viaje> respuesta = restTemplate.getForEntity("/viajes/", Viaje.class, idViaje);
ResponseEntity<Viaje> respuesta2 = restTemplate.getForEntity("/viajes/" + idViaje, Viaje.class, idViaje);
// Verificar que la respuesta sea un código 404 Not Found
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
Assertions.assertThat(respuesta2.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@Test
public void testActualizarViajeExistente() {
int idViaje = 847132468;
// Realizar la solicitud POST para actualizar el cliente existente
ResponseEntity<DTOViaje> respuesta = restTemplate.postForEntity
(
"/viajes/actualizarViaje/", idViaje, DTOViaje.class
);
// Verificar que la respuesta sea mala, ya que no existe ese usuario en la bbdd
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
// Datos de prueba
int idViaje = 1; // Debes adaptar esto según tus datos de prueba
Date fecha = new Date(2024, 12, 1);
DTOViaje viaje = new DTOViaje("Origen", "destino", fecha, 4, 10, idViaje);
ResponseEntity<DTOViaje> respuesta = restTemplate.postForEntity("/viajes", viaje, DTOViaje.class);
// Verificar que la creación del usuario fue exitosa
Assertions.assertThat(respuesta.getStatusCode()).isEqualTo(HttpStatus.CREATED);
String origen = "nuevoOrigen";
ResponseEntity<DTOUsuario> respuestaA = restTemplate.exchange(
"/viajes/actualizarViaje/{id}", HttpMethod.PUT, new HttpEntity<>(origen), DTOUsuario.class, idViaje
);
// Verificar que la respuesta sea OK, ya que se supone que el usuario existe en la base de datos
Assertions.assertThat(respuestaA.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@Test
public void testEliminarViajeExistente() {
public void testEliminarViaje(){
// Datos de prueba
int idViaje = 1; // Debes adaptar esto según tus datos de prueba
Date fecha = new Date(2024, 12, 1);
DTOViaje viaje = new DTOViaje("Origen", "destino", fecha, 4, 10, idViaje);
ResponseEntity<DTOViaje> respuesta = restTemplate.postForEntity("/viajes", viaje, DTOViaje.class);
// Realizar la solicitud DELETE para eliminar un viaje existente
restTemplate.delete("/viajes/eliminarViaje/{id}", idViaje);
ResponseEntity<Viaje> respuestaDespuesDeEliminar = restTemplate.getForEntity("/viajes/", Viaje.class, idViaje);
// Realizar la solicitud GET para obtener un viaje por su ID
ResponseEntity<Viaje> respuesta2 = restTemplate.getForEntity("/viajes/" + idViaje, Viaje.class, idViaje);
// Verificar que la respuesta sea un código 404 Not Found
Assertions.assertThat(respuestaDespuesDeEliminar.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
Assertions.assertThat(respuesta2.getStatusCode()).isEqualTo(HttpStatus.OK);
restTemplate.delete("/viajes/eliminarViaje/" + idViaje, idViaje);
ResponseEntity<DTOUsuario> respuesta3 = restTemplate.getForEntity("/viajes/", DTOUsuario.class, idViaje);
// Verificar que la respuesta sea un error 404 Not Found
Assertions.assertThat(respuesta3.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
......
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