Modificación UsuarioRepository

parent bd910a28
package com.carpooling.carpoolingaoraha.repositorios; package com.carpooling.carpoolingaoraha.repositorios;
import com.carpooling.carpoolingaoraha.entidades.Reserva;
import com.carpooling.carpoolingaoraha.entidades.Usuario; import com.carpooling.carpoolingaoraha.entidades.Usuario;
import com.carpooling.carpoolingaoraha.entidades.Viaje;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.function.Function; import java.util.function.Function;
public interface UsuarioRepository extends JpaRepository<Usuario, String> { @Repository
Usuario findByDNI(String dni); @Transactional(propagation = Propagation.REQUIRED)
void deleteByDNI(String dni); public class UsuarioRepository {
public default void actualizarPuntuacion(Usuario usuario, int nuevaPuntuacion) { @PersistenceContext
EntityManager em;
@Cacheable("usuarios")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public Optional<Usuario> buscar(String DNI){
return Optional.ofNullable(em.find(Usuario.class, DNI));
}
@CacheEvict(value = "usuarios", key = "#usuario.DNI")
public void guardar(Usuario usuario){
em.persist(usuario);
}
@CacheEvict(value = "usuarios", key = "#usuario.DNI")
public void nuevaReserva(Usuario usuario, Reserva reserva, Viaje viaje){
em.persist(reserva);
usuario = em.merge(usuario);
usuario.ofrecerViaje(viaje.getOrigen(), viaje.getDestino(), viaje.getFechaSalida(), viaje.getnAsientos(), viaje.getPrecioAsiento());
}
public void actualizarPuntuacion(Usuario usuario, int nuevaPuntuacion) {
// Carga el usuario desde la base de datos // Carga el usuario desde la base de datos
Usuario usuarioExistente = findById(usuario.getDNI()).orElse(null); Usuario usuarioExistente = em.find(Usuario.class, usuario.getDNI());
if (usuarioExistente != null) { if (usuarioExistente != null) {
// Agrega la nueva puntuación // Agrega la nueva puntuación
...@@ -25,7 +57,9 @@ public interface UsuarioRepository extends JpaRepository<Usuario, String> { ...@@ -25,7 +57,9 @@ public interface UsuarioRepository extends JpaRepository<Usuario, String> {
usuarioExistente.setPuntuacionMedia(puntuacionMedia); usuarioExistente.setPuntuacionMedia(puntuacionMedia);
// Guarda el usuario actualizado (sin duplicar) // Guarda el usuario actualizado (sin duplicar)
save(usuarioExistente); em.merge(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