SectionRepository.java
package model.repository;
import model.entity.Section;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.io.Serializable;
import java.time.Instant;
import java.util.List;
/**
* Classe che incapsula la logica per il recupero di entità di tipo {@link Section}
*/
public class SectionRepository implements Serializable {
@PersistenceContext
protected EntityManager em;
/**
* Restituisce una lista con i dati delle sezioni con più follows
* @return lista di entità Section delle sezioni con più follows
*/
public List<Section> getMostFollowedSections(){
return em.createQuery("from Section s order by follows.size desc", Section.class).getResultList();
}
/**
* Restituisce una lista con i dati delle sezioni con più follows in un dato arco di tempo
* @param after data dopo la quale contare i follows delle sezioni
* @return lista di entità Section delle sezioni con più follows
*/
public List<Section> getMostFollowedSections(Instant after){
return em.createQuery(
"select s from Section s right join s.follows f where f.followDate >= :after " +
"group by s " +
"order by count(f) desc", Section.class)
.setParameter("after",after).getResultList();
}
}