Partially implement Rider spendings (1.2.3 a)

This commit is contained in:
Tobias Eidelpes 2021-04-05 20:11:32 +02:00
parent e715ce7f62
commit b38b24f018

View File

@ -3,15 +3,25 @@ package dst.ass1.jpa.dao.impl;
import dst.ass1.jpa.dao.IRiderDAO; import dst.ass1.jpa.dao.IRiderDAO;
import dst.ass1.jpa.model.IMoney; import dst.ass1.jpa.model.IMoney;
import dst.ass1.jpa.model.IRider; 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.Rider;
import dst.ass1.jpa.model.impl.Trip;
import dst.ass1.jpa.model.impl.TripInfo;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.NoResultException; import javax.persistence.NoResultException;
import javax.persistence.Query; 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 java.util.Map;
import static dst.ass1.jpa.util.Constants.M_RIDER_EMAIL; import static dst.ass1.jpa.util.Constants.*;
import static dst.ass1.jpa.util.Constants.Q_RIDER_BY_EMAIL;
public class RiderDAO extends GenericDAO<IRider> implements IRiderDAO { public class RiderDAO extends GenericDAO<IRider> implements IRiderDAO {
public RiderDAO(EntityManager entityManager) { public RiderDAO(EntityManager entityManager) {
@ -31,11 +41,26 @@ public class RiderDAO extends GenericDAO<IRider> implements IRiderDAO {
@Override @Override
public Double getTotalDistanceOfMostRecentRider() { public Double getTotalDistanceOfMostRecentRider() {
// TODO
return null; return null;
} }
@Override @Override
public Map<IRider, Map<String, IMoney>> getRecentSpending() { public Map<IRider, Map<String, IMoney>> getRecentSpending() {
CriteriaBuilder criteriaBuilder = super.entityManager.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
Root<IRider> root = criteriaQuery.from(Rider.class);
Join<IRider, ITrip> riderJoinTrip = root.join(M_RIDER_TRIPS);
Join<Join<IRider, ITrip>, 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; return null;
} }
} }