package org.iatoki.judgels.uriel.models.daos.impls;
import org.iatoki.judgels.play.models.daos.impls.AbstractJudgelsHibernateDao;
import org.iatoki.judgels.play.models.entities.AbstractModel_;
import org.iatoki.judgels.uriel.ContestAnnouncementStatus;
import org.iatoki.judgels.uriel.models.daos.ContestAnnouncementDao;
import org.iatoki.judgels.uriel.models.entities.ContestAnnouncementModel;
import org.iatoki.judgels.uriel.models.entities.ContestAnnouncementModel_;
import play.db.jpa.JPA;
import javax.inject.Named;
import javax.inject.Singleton;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Root;
import java.util.List;
@Singleton
@Named("contestAnnouncementDao")
public final class ContestAnnouncementHibernateDao extends AbstractJudgelsHibernateDao<ContestAnnouncementModel> implements ContestAnnouncementDao {
public ContestAnnouncementHibernateDao() {
super(ContestAnnouncementModel.class);
}
@Override
public List<ContestAnnouncementModel> findPublishedByContestJidOrderedByUpdateTime(String contestJid) {
CriteriaBuilder cb = JPA.em().getCriteriaBuilder();
CriteriaQuery<ContestAnnouncementModel> query = cb.createQuery(ContestAnnouncementModel.class);
Root<ContestAnnouncementModel> root = query.from(ContestAnnouncementModel.class);
Order orderBy = cb.desc(root.get(AbstractModel_.timeUpdate));
query.where(cb.and(cb.equal(root.get(ContestAnnouncementModel_.contestJid), contestJid), cb.equal(root.get(ContestAnnouncementModel_.status), ContestAnnouncementStatus.PUBLISHED.name()))).orderBy(orderBy);
return JPA.em().createQuery(query).getResultList();
}
@Override
public List<String> findAllPublishedAnnouncementJidInContest(String contestJid) {
CriteriaBuilder cb = JPA.em().getCriteriaBuilder();
CriteriaQuery<String> query = cb.createQuery(String.class);
Root<ContestAnnouncementModel> root = query.from(ContestAnnouncementModel.class);
query
.select(root.get(ContestAnnouncementModel_.jid))
.where(cb.and(cb.equal(root.get(ContestAnnouncementModel_.contestJid), contestJid), cb.equal(root.get(ContestAnnouncementModel_.status), ContestAnnouncementStatus.PUBLISHED.name())));
return JPA.em().createQuery(query).getResultList();
}
}