diff --git a/backend/src/main/java/edu/zut/bookrider/repository/DistanceCacheRepository.java b/backend/src/main/java/edu/zut/bookrider/repository/DistanceCacheRepository.java index 7913beba..1c9d253e 100644 --- a/backend/src/main/java/edu/zut/bookrider/repository/DistanceCacheRepository.java +++ b/backend/src/main/java/edu/zut/bookrider/repository/DistanceCacheRepository.java @@ -2,14 +2,17 @@ import edu.zut.bookrider.model.DistanceCache; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.math.BigDecimal; import java.util.Optional; public interface DistanceCacheRepository extends JpaRepository { - Optional findByStartLatitudeAndStartLongitudeAndEndLatitudeAndEndLongitude( - BigDecimal startLatitude, - BigDecimal startLongitude, - BigDecimal endLatitude, - BigDecimal endLongitude); + @Query("SELECT d FROM DistanceCache d WHERE " + + "(d.startLatitude = :lat1 AND d.startLongitude = :lon1 AND d.endLatitude = :lat2 AND d.endLongitude = :lon2) OR " + + "(d.startLatitude = :lat2 AND d.startLongitude = :lon2 AND d.endLatitude = :lat1 AND d.endLongitude = :lon1)") + Optional findByCoordinates( + @Param("lat1") BigDecimal lat1, @Param("lon1") BigDecimal lon1, + @Param("lat2") BigDecimal lat2, @Param("lon2") BigDecimal lon2); } diff --git a/backend/src/main/java/edu/zut/bookrider/service/DistanceService.java b/backend/src/main/java/edu/zut/bookrider/service/DistanceService.java index d2099128..8d5c2a3b 100644 --- a/backend/src/main/java/edu/zut/bookrider/service/DistanceService.java +++ b/backend/src/main/java/edu/zut/bookrider/service/DistanceService.java @@ -28,13 +28,7 @@ public BigDecimal getDistance( BigDecimal endLat = BigDecimal.valueOf(endCoordinates.getLatitude()); BigDecimal endLon = BigDecimal.valueOf(endCoordinates.getLongitude()); - Optional cachedDistance = distanceCacheRepository - .findByStartLatitudeAndStartLongitudeAndEndLatitudeAndEndLongitude(startLat, startLon, endLat, endLon); - - if (cachedDistance.isEmpty()) { - cachedDistance = distanceCacheRepository - .findByStartLatitudeAndStartLongitudeAndEndLatitudeAndEndLongitude(endLat, endLon, startLat, startLon); - } + Optional cachedDistance = distanceCacheRepository.findByCoordinates(startLat, startLon, endLat, endLon); if (cachedDistance.isPresent()) { return cachedDistance.get().getDistance();