View Javadoc
1   package model.repository;
2   
3   import model.entity.Section;
4   
5   import javax.persistence.EntityManager;
6   import javax.persistence.PersistenceContext;
7   import java.io.Serializable;
8   import java.time.Instant;
9   import java.util.List;
10  
11  
12  /**
13   * Classe che incapsula la logica per il recupero di entità di tipo {@link Section}
14   */
15  public class SectionRepository implements Serializable {
16  
17      @PersistenceContext
18      protected EntityManager em;
19  
20      /**
21       * Restituisce una lista con i dati delle sezioni con più follows
22       * @return lista di entità Section delle sezioni con più follows
23       */
24      public List<Section> getMostFollowedSections(){
25          return em.createQuery("from Section s order by follows.size desc", Section.class).getResultList();
26      }
27  
28      /**
29       * Restituisce una lista con i dati delle sezioni con più follows in un dato arco di tempo
30       * @param after data dopo la quale contare i follows delle sezioni
31       * @return lista di entità Section delle sezioni con più follows
32       */
33      public List<Section> getMostFollowedSections(Instant after){
34          return em.createQuery(
35                  "select s from Section s right join s.follows f where f.followDate >= :after " +
36                  "group by s " +
37                  "order by count(f) desc", Section.class)
38                  .setParameter("after",after).getResultList();
39      }
40  }