diff --git a/tracky-web/src/main/java/kernel360/trackyweb/dashboard/infrastructure/repository/DashGpsHistoryRepositoryCustom.java b/tracky-web/src/main/java/kernel360/trackyweb/dashboard/infrastructure/repository/DashGpsHistoryRepositoryCustom.java new file mode 100644 index 00000000..61e58911 --- /dev/null +++ b/tracky-web/src/main/java/kernel360/trackyweb/dashboard/infrastructure/repository/DashGpsHistoryRepositoryCustom.java @@ -0,0 +1,9 @@ +package kernel360.trackyweb.dashboard.infrastructure.repository; + +import java.util.List; + +import kernel360.trackycore.core.domain.entity.GpsHistoryEntity; + +public interface DashGpsHistoryRepositoryCustom { + List getLatestGps(String bizUuid); +} diff --git a/tracky-web/src/main/java/kernel360/trackyweb/dashboard/infrastructure/repository/DashGpsHistoryRepositoryCustomImpl.java b/tracky-web/src/main/java/kernel360/trackyweb/dashboard/infrastructure/repository/DashGpsHistoryRepositoryCustomImpl.java new file mode 100644 index 00000000..9ac80279 --- /dev/null +++ b/tracky-web/src/main/java/kernel360/trackyweb/dashboard/infrastructure/repository/DashGpsHistoryRepositoryCustomImpl.java @@ -0,0 +1,50 @@ +package kernel360.trackyweb.dashboard.infrastructure.repository; + +import static kernel360.trackycore.core.domain.entity.QDriveEntity.*; +import static kernel360.trackycore.core.domain.entity.QGpsHistoryEntity.*; + +import java.util.List; + +import org.springframework.stereotype.Repository; + +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.jpa.JPAExpressions; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import kernel360.trackycore.core.domain.entity.GpsHistoryEntity; +import kernel360.trackycore.core.domain.entity.QDriveEntity; +import kernel360.trackycore.core.domain.entity.QGpsHistoryEntity; +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class DashGpsHistoryRepositoryCustomImpl implements DashGpsHistoryRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + @Override + public List getLatestGps(String bizUuid) { + QGpsHistoryEntity gSub = new QGpsHistoryEntity("gSub"); + QDriveEntity dSub = new QDriveEntity("dSub"); + + return queryFactory + .selectFrom(gpsHistoryEntity) + .join(gpsHistoryEntity.drive, driveEntity).fetchJoin() + .where( + Expressions.list( + driveEntity.car.mdn, + gpsHistoryEntity.oTime + ).in( + JPAExpressions + .select( + dSub.car.mdn, + gSub.oTime.max() + ) + .from(gSub) + .join(gSub.drive, dSub) + .groupBy(dSub.car.mdn) + ) + ) + .fetch(); + } +}