Commit dcc7df63 by Rubén Ramírez

feat: [ServicioRecursos]: Añadidas nuevas funciones para poder tener un ranking…

feat: [ServicioRecursos]: Añadidas nuevas funciones para poder tener un ranking y actualizar el atributo de conteo semanal
parent 624a4273
...@@ -6,6 +6,7 @@ import com.ujaen.tfg.mangaffinity.repositorios.RepositorioCapitulo; ...@@ -6,6 +6,7 @@ import com.ujaen.tfg.mangaffinity.repositorios.RepositorioCapitulo;
import com.ujaen.tfg.mangaffinity.repositorios.RepositorioRecurso; import com.ujaen.tfg.mangaffinity.repositorios.RepositorioRecurso;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate; import java.time.LocalDate;
...@@ -337,13 +338,42 @@ public class ServicioRecursos { ...@@ -337,13 +338,42 @@ public class ServicioRecursos {
return repositorioRecurso.buscarPorId(id).isPresent(); return repositorioRecurso.buscarPorId(id).isPresent();
} }
/**
* @brief Incrementa los contadores de accesos de un recurso.
* @param id Identificador del recurso cuyo contador de accesos se incrementará.
* @throws RecursoNoExiste Si el recurso con el ID especificado no existe.
*/
@Transactional @Transactional
public void incrementarContadorAccesos(Long id) { public void incrementarContadorAccesos(Long id) {
Recurso recurso = repositorioRecurso.buscarPorId(id) Recurso recurso = repositorioRecurso.buscarPorId(id)
.orElseThrow(RecursoNoExiste::new); .orElseThrow(RecursoNoExiste::new);
recurso.setContadorAccesos(recurso.getContadorAccesos() + 1); recurso.setContadorAccesos(recurso.getContadorAccesos() + 1);
recurso.setContadorAccesosSemanal(recurso.getContadorAccesosSemanal() + 1);
repositorioRecurso.actualiza(recurso); repositorioRecurso.actualiza(recurso);
} }
/**
* @brief Reinicia el contador semanal de accesos de todos los recursos.
* @throws RecursoNoExiste Si alguno de los recursos no se encuentra en la base de datos.
*/
@Scheduled(cron = "0 0 0 * * 0") // Se ejecuta cada domingo a medianoche
private void reiniciarContadorAccesos() {
LocalDate haceUnaSemana = LocalDate.now().minusWeeks(1);
List<Recurso> recursos = repositorioRecurso.listarRecursos();
for (Recurso recurso : recursos) {
recurso.setContadorAccesosSemanal(0);
repositorioRecurso.actualiza(recurso);
}
}
/**
* @brief Obtiene la lista de los recursos más accedidos en la última semana.
* @return Lista de los recursos más populares de la última semana.
*/
public List<Recurso> obtenerTopRecursosUltimaSemana() {
return repositorioRecurso.obtenerTopRecursosUltimaSemana();
}
} }
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