package persistencia;
import java.util.Calendar;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
@Stateless
public class SitioInteresDAOIpml extends BaseDAO<SitioInteres> implements
SitioInteresDAO {
private static final String obtenerTodosQuery =
"SELECT si " +
"FROM SitioInteres si";
private static final String obtenerCatUsuarioQuery =
"SELECT si " +
"FROM SitioInteres si JOIN si.categorias csi " +
"WHERE EXISTS ( " +
" SELECT c FROM Usuario u JOIN u.categorias c" +
" WHERE c = csi AND" +
" u.id = :userId)";
private static final String cantCheckInsQuery =
"SELECT count(c.id) " +
"FROM SitioInteres si JOIN si.checkIns c " +
"WHERE si.id = :idSitio";
private static final String cantCheckInsDesdeQuery =
"SELECT count(c.id) " +
"FROM SitioInteres si JOIN si.checkIns c " +
"WHERE si.id = :idSitio " +
" AND c.fecha >= :fecha";
private static final String cantCheckInsHastaQuery =
"SELECT count(c.id) " +
"FROM SitioInteres si JOIN si.checkIns c " +
"WHERE si.id = :idSitio " +
" AND c.fecha <= :fecha";
private static final String cantCheckInsEntreQuery =
"SELECT count(c.id) " +
"FROM SitioInteres si JOIN si.checkIns c " +
"WHERE si.id = :idSitio " +
" AND c.fecha >= :inicio " +
" AND c.fecha <= :fin";
@Override
public SitioInteres buscarPorId(int id) {
SitioInteres ret = em.find(SitioInteres.class, id);
return ret;
}
@Override
public List<SitioInteres> obtenerTodos() {
TypedQuery<SitioInteres> query = em.createQuery(obtenerTodosQuery, SitioInteres.class);
return query.getResultList();
}
@Override
public List<SitioInteres> obtenerParaUsuario(int id) {
TypedQuery<SitioInteres> query = em.createQuery(obtenerCatUsuarioQuery, SitioInteres.class);
query.setParameter("userId", id);
return query.getResultList();
}
@Override
public long cantCheckInSitio(int idSitio) {
TypedQuery<Long> query = em.createQuery(cantCheckInsQuery, Long.class);
query.setParameter("idSitio", idSitio);
Long ret = query.getSingleResult();
return ret;
}
@Override
public long cantCheckInSitioDesde(int idSitio, Calendar fecha) {
TypedQuery<Long> query = em.createQuery(cantCheckInsDesdeQuery, Long.class);
query.setParameter("idSitio", idSitio);
query.setParameter("fecha", fecha);
Long ret = query.getSingleResult();
return ret;
}
@Override
public long cantCheckInSitioHasta(int idSitio, Calendar fecha) {
TypedQuery<Long> query = em.createQuery(cantCheckInsHastaQuery, Long.class);
query.setParameter("idSitio", idSitio);
query.setParameter("fecha", fecha);
Long ret = query.getSingleResult();
return ret;
}
@Override
public long cantCheckInSitioEntre(int idSitio, Calendar inicio, Calendar fin) {
TypedQuery<Long> query = em.createQuery(cantCheckInsEntreQuery, Long.class);
query.setParameter("idSitio", idSitio);
query.setParameter("inicio", inicio);
query.setParameter("fin", fin);
Long ret = query.getSingleResult();
return ret;
}
}