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

parent 7450594b
...@@ -24,10 +24,12 @@ public class Usuario { ...@@ -24,10 +24,12 @@ public class Usuario {
private int telefono; private int telefono;
private String email; private String email;
private String claveAcceso; private String claveAcceso;
@Transient
private ArrayList<Integer> puntuacion; private ArrayList<Integer> puntuacion;
private Rol rol; private Rol rol;
@Transient @Transient
private ArrayList<Integer> viajesOfertados; private ArrayList<Integer> viajesOfertados;
double puntuacionMedia;
public Usuario() { public Usuario() {
} }
...@@ -49,6 +51,7 @@ public class Usuario { ...@@ -49,6 +51,7 @@ public class Usuario {
this.viajesOfertados = null; this.viajesOfertados = null;
} }
this.sistemaCarPooling = new SistemaCarPooling(); this.sistemaCarPooling = new SistemaCarPooling();
puntuacionMedia = 0;
} }
public String getNombre() { public String getNombre() {
...@@ -107,12 +110,12 @@ public class Usuario { ...@@ -107,12 +110,12 @@ public class Usuario {
this.claveAcceso = claveAcceso; this.claveAcceso = claveAcceso;
} }
public int getPuntuacion() { public ArrayList<Integer> getPuntuacion() {
return puntuacion; return puntuacion;
} }
public void setPuntuacion(int puntuacion) { public void setPuntuacion(int puntuacion) {
this.puntuacion += puntuacion; this.puntuacion.add(puntuacion);
} }
public Rol getRol() { public Rol getRol() {
...@@ -123,6 +126,18 @@ public class Usuario { ...@@ -123,6 +126,18 @@ public class Usuario {
this.rol = rol; 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(){ public void cambiarRol(){
if(this.rol == CONDUCTOR){ if(this.rol == CONDUCTOR){
rol = PASAJERO; rol = PASAJERO;
...@@ -165,10 +180,6 @@ public class Usuario { ...@@ -165,10 +180,6 @@ public class Usuario {
return false; 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) { public List<Viaje> buscarViaje(String origen, String destino, Date fecha, Rol rol, List<Viaje> todosLosViajes) {
List<Viaje> viajesDisponibles = new ArrayList<>(); List<Viaje> viajesDisponibles = new ArrayList<>();
...@@ -193,42 +204,25 @@ public class Usuario { ...@@ -193,42 +204,25 @@ public class Usuario {
Collections.sort(viajesDisponibles, new Comparator<Viaje>() { Collections.sort(viajesDisponibles, new Comparator<Viaje>() {
@Override @Override
public int compare(Viaje viaje1, Viaje viaje2) { public int compare(Viaje viaje1, Viaje viaje2) {
int puntuacionConductor1 = 0; double puntuacionConductor1 = 0;
int puntuacionConductor2 = 0; double puntuacionConductor2 = 0;
for (Reserva reserva : reservasAsociadas) { for (Reserva reserva : reservasAsociadas) {
if (reserva.getViaje().equals(viaje1)) { if (reserva.getViaje().equals(viaje1)) {
puntuacionConductor1 = Math.max(puntuacionConductor1, reserva.getConductor().getPuntuacion()); puntuacionConductor1 = Math.max(puntuacionConductor1, reserva.getConductor().getPuntuacionMedia());
} }
if (reserva.getViaje().equals(viaje2)) { if (reserva.getViaje().equals(viaje2)) {
puntuacionConductor2 = Math.max(puntuacionConductor2, reserva.getConductor().getPuntuacion()); puntuacionConductor2 = Math.max(puntuacionConductor2, reserva.getConductor().getPuntuacionMedia());
} }
} }
// Ordenar en orden descendente // Ordenar en orden descendente
return Integer.compare(puntuacionConductor2, puntuacionConductor1); return Double.compare(puntuacionConductor2, puntuacionConductor1);
} }
}); });
return viajesDisponibles; 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; ...@@ -4,11 +4,28 @@ import com.carpooling.carpoolingaoraha.entidades.Usuario;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public interface UsuarioRepository extends JpaRepository<Usuario, String> { public interface UsuarioRepository extends JpaRepository<Usuario, String> {
Usuario findByDNI(String dni); Usuario findByDNI(String dni);
void deleteByDNI(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