diff --git a/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/RiderDAO.java b/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/RiderDAO.java index 96d58db..1fdced0 100644 --- a/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/RiderDAO.java +++ b/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/RiderDAO.java @@ -3,15 +3,25 @@ package dst.ass1.jpa.dao.impl; import dst.ass1.jpa.dao.IRiderDAO; import dst.ass1.jpa.model.IMoney; import dst.ass1.jpa.model.IRider; +import dst.ass1.jpa.model.ITrip; +import dst.ass1.jpa.model.ITripInfo; import dst.ass1.jpa.model.impl.Rider; +import dst.ass1.jpa.model.impl.Trip; +import dst.ass1.jpa.model.impl.TripInfo; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.Query; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Join; +import javax.persistence.criteria.Root; +import java.time.ZonedDateTime; +import java.util.Date; +import java.util.List; import java.util.Map; -import static dst.ass1.jpa.util.Constants.M_RIDER_EMAIL; -import static dst.ass1.jpa.util.Constants.Q_RIDER_BY_EMAIL; +import static dst.ass1.jpa.util.Constants.*; public class RiderDAO extends GenericDAO implements IRiderDAO { public RiderDAO(EntityManager entityManager) { @@ -31,11 +41,26 @@ public class RiderDAO extends GenericDAO implements IRiderDAO { @Override public Double getTotalDistanceOfMostRecentRider() { + // TODO return null; } @Override public Map> getRecentSpending() { + CriteriaBuilder criteriaBuilder = super.entityManager.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(); + Root root = criteriaQuery.from(Rider.class); + Join riderJoinTrip = root.join(M_RIDER_TRIPS); + Join, ITripInfo> riderJoinTripJoinTripInfo = riderJoinTrip.join(A_TRIP_INFO); + + Date date = Date.from(ZonedDateTime.now().minusMonths(1).toInstant()); + + criteriaQuery.multiselect( + riderJoinTrip.get(M_TRIP_RIDER), riderJoinTripJoinTripInfo.get(M_TRIP_INFO_TOTAL) + ).where(criteriaBuilder.greaterThanOrEqualTo(riderJoinTripJoinTripInfo.get(M_TRIP_INFO_COMPLETED), date)); + + List result = super.entityManager.createQuery(criteriaQuery).getResultList(); + return null; } }