001package model.repository; 002 003import model.entity.Section; 004 005import javax.persistence.EntityManager; 006import javax.persistence.PersistenceContext; 007import java.io.Serializable; 008import java.time.Instant; 009import java.util.List; 010 011 012/** 013 * Classe che incapsula la logica per il recupero di entità di tipo {@link Section} 014 */ 015public class SectionRepository implements Serializable { 016 017 @PersistenceContext 018 protected EntityManager em; 019 020 /** 021 * Restituisce una lista con i dati delle sezioni con più follows 022 * @return lista di entità Section delle sezioni con più follows 023 */ 024 public List<Section> getMostFollowedSections(){ 025 return em.createQuery("from Section s order by follows.size desc", Section.class).getResultList(); 026 } 027 028 /** 029 * Restituisce una lista con i dati delle sezioni con più follows in un dato arco di tempo 030 * @param after data dopo la quale contare i follows delle sezioni 031 * @return lista di entità Section delle sezioni con più follows 032 */ 033 public List<Section> getMostFollowedSections(Instant after){ 034 return em.createQuery( 035 "select s from Section s right join s.follows f where f.followDate >= :after " + 036 "group by s " + 037 "order by count(f) desc", Section.class) 038 .setParameter("after",after).getResultList(); 039 } 040}