Modifico la clase usuario para que la puntuacion sea actualizable con cada nueva Reserva

parent 7450594b
......@@ -24,10 +24,12 @@ public class Usuario {
private int telefono;
private String email;
private String claveAcceso;
@Transient
private ArrayList<Integer> puntuacion;
private Rol rol;
@Transient
private ArrayList<Integer> viajesOfertados;
double puntuacionMedia;
public Usuario() {
}
......@@ -49,6 +51,7 @@ public class Usuario {
this.viajesOfertados = null;
}
this.sistemaCarPooling = new SistemaCarPooling();
puntuacionMedia = 0;
}
public String getNombre() {
......@@ -107,12 +110,12 @@ public class Usuario {
this.claveAcceso = claveAcceso;
}
public int getPuntuacion() {
public ArrayList<Integer> getPuntuacion() {
return puntuacion;
}
public void setPuntuacion(int puntuacion) {
this.puntuacion += puntuacion;
this.puntuacion.add(puntuacion);
}
public Rol getRol() {
......@@ -123,6 +126,18 @@ public class Usuario {
this.rol = rol;
}
public double getPuntuacionMedia() {
for (int i = 0; i < getPuntuacion().size(); i++) {
puntuacionMedia += getPuntuacion().get(i);
}
puntuacionMedia= puntuacionMedia/getPuntuacion().size();
return puntuacionMedia;
}
public void setPuntuacionMedia(double puntuacionMedia) {
this.puntuacionMedia = puntuacionMedia;
}
public void cambiarRol(){
if(this.rol == CONDUCTOR){
rol = PASAJERO;
......@@ -165,10 +180,6 @@ public class Usuario {
return false;
}
public double puntuacionMedia(){
return this.puntuacion/viajesOfertados.size();
}
public List<Viaje> buscarViaje(String origen, String destino, Date fecha, Rol rol, List<Viaje> todosLosViajes) {
List<Viaje> viajesDisponibles = new ArrayList<>();
......@@ -193,42 +204,25 @@ public class Usuario {
Collections.sort(viajesDisponibles, new Comparator<Viaje>() {
@Override
public int compare(Viaje viaje1, Viaje viaje2) {
int puntuacionConductor1 = 0;
int puntuacionConductor2 = 0;
double puntuacionConductor1 = 0;
double puntuacionConductor2 = 0;
for (Reserva reserva : reservasAsociadas) {
if (reserva.getViaje().equals(viaje1)) {
puntuacionConductor1 = Math.max(puntuacionConductor1, reserva.getConductor().getPuntuacion());
puntuacionConductor1 = Math.max(puntuacionConductor1, reserva.getConductor().getPuntuacionMedia());
}
if (reserva.getViaje().equals(viaje2)) {
puntuacionConductor2 = Math.max(puntuacionConductor2, reserva.getConductor().getPuntuacion());
puntuacionConductor2 = Math.max(puntuacionConductor2, reserva.getConductor().getPuntuacionMedia());
}
}
// Ordenar en orden descendente
return Integer.compare(puntuacionConductor2, puntuacionConductor1);
return Double.compare(puntuacionConductor2, puntuacionConductor1);
}
});
return viajesDisponibles;
}
public void actualizarPuntuacion(Usuario usuario, int nuevaPuntuacion) {
// Carga el usuario desde la base de datos
Usuario usuarioExistente = usuarioRepository.findById(usuario.getId()).orElse(null);
if (usuarioExistente != null) {
// Agrega la nueva puntuación
usuarioExistente.getPuntuaciones().add(nuevaPuntuacion);
// Calcula la puntuación media
List<Integer> puntuaciones = usuarioExistente.getPuntuaciones();
double puntuacionMedia = puntuaciones.stream().mapToInt(Integer::intValue).average().orElse(0.0);
usuarioExistente.setPuntuacionMedia(puntuacionMedia);
// Guarda el usuario actualizado (sin duplicar)
usuarioRepository.save(usuarioExistente);
}
}
}
......@@ -4,11 +4,28 @@ import com.carpooling.carpoolingaoraha.entidades.Usuario;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.function.Function;
public interface UsuarioRepository extends JpaRepository<Usuario, String> {
Usuario findByDNI(String dni);
void deleteByDNI(String dni);
public default void actualizarPuntuacion(Usuario usuario, int nuevaPuntuacion) {
// Carga el usuario desde la base de datos
Usuario usuarioExistente = findById(usuario.getDNI()).orElse(null);
if (usuarioExistente != null) {
// Agrega la nueva puntuación
usuarioExistente.getPuntuacion().add(nuevaPuntuacion);
// Calcula la puntuación media
List<Integer> puntuaciones = usuarioExistente.getPuntuacion();
double puntuacionMedia = puntuaciones.stream().mapToInt(Integer::intValue).average().orElse(0.0);
usuarioExistente.setPuntuacionMedia(puntuacionMedia);
// Guarda el usuario actualizado (sin duplicar)
save(usuarioExistente);
}
}
}
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