package fr.openwide.maven.artifact.notifier.core.business.artifact.dao; import java.util.List; import java.util.Map; import org.springframework.stereotype.Repository; import com.querydsl.core.group.GroupBy; import com.querydsl.jpa.impl.JPAQuery; import fr.openwide.core.jpa.business.generic.dao.GenericEntityDaoImpl; import fr.openwide.maven.artifact.notifier.core.business.artifact.model.Artifact; import fr.openwide.maven.artifact.notifier.core.business.artifact.model.ArtifactVersionNotification; import fr.openwide.maven.artifact.notifier.core.business.artifact.model.ArtifactVersionNotificationStatus; import fr.openwide.maven.artifact.notifier.core.business.artifact.model.QArtifactVersionNotification; import fr.openwide.maven.artifact.notifier.core.business.user.model.User; @Repository("artifactVersionNotificationDao") public class ArtifactVersionNotificationDaoImpl extends GenericEntityDaoImpl<Long, ArtifactVersionNotification> implements IArtifactVersionNotificationDao { private static final QArtifactVersionNotification qArtifactVersionNotification = QArtifactVersionNotification.artifactVersionNotification; public ArtifactVersionNotificationDaoImpl() { super(); } @Override public List<ArtifactVersionNotification> listByArtifact(Artifact artifact) { JPAQuery<ArtifactVersionNotification> query = new JPAQuery<>(getEntityManager()); query.select(qArtifactVersionNotification) .from(qArtifactVersionNotification) .where(qArtifactVersionNotification.artifactVersion.artifact.eq(artifact)) .orderBy(qArtifactVersionNotification.creationDate.desc()); return query.fetch(); } @Override public Map<User, List<ArtifactVersionNotification>> listNotificationsToSend() { JPAQuery<Void> query = new JPAQuery<>(getEntityManager()); return query.from(qArtifactVersionNotification) .where(qArtifactVersionNotification.status.eq(ArtifactVersionNotificationStatus.PENDING)) .orderBy(qArtifactVersionNotification.user.id.asc(), qArtifactVersionNotification.id.asc()) .transform(GroupBy.groupBy(qArtifactVersionNotification.user).as(GroupBy.list(qArtifactVersionNotification))); } }