Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix/select query #24

Merged
merged 4 commits into from
Jun 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,12 @@ List<TrafficDetailEntity> findAllInIdsBetween(

@Query(
value =
"SELECT * FROM traffic_detail td "
+ "INNER JOIN (SELECT t.traffic_id, MAX(t.time_left_reg_dt) AS maxTimeLeftRegDt "
+ " FROM traffic_detail t "
+ " WHERE t.traffic_id IN :trafficIds "
+ " GROUP BY t.traffic_id) maxTd "
+ "ON td.traffic_id = maxTd.traffic_id AND td.time_left_reg_dt = maxTd.maxTimeLeftRegDt "
+ "WHERE td.traffic_id IN :trafficIds",
nativeQuery = true)
List<TrafficDetailEntity> findAllTopDataInTrafficIds(@Param("trafficIds") List<Long> trafficIds);
" SELECT td1 "
+ " FROM TrafficDetailEntity td1 "
+ " WHERE td1.traffic in (:trafficIds) "
+ " AND td1.timeLeftRegDt = ( "
+ " SELECT MAX(td2.timeLeftRegDt) "
+ " FROM TrafficDetailEntity td2 "
+ " WHERE td2.traffic = td1.traffic)")
List<TrafficDetailEntity> findMostRecenlyData(@Param("trafficIds") List<Long> trafficIds);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주어진 코드 패치는 좋아 보입니다. 개선을 제안하자면 'traffic' 컬럼과 'timeLeftRegDt' 컬럼에 대한 정확한 조인 조건이 필요합니다. 현재의 쿼리는 서브쿼리를 사용하여 가장 최근 데이터를 찾습니다. 그러나 성능 개선을 위해 인덱스를 고려할 수 있습니다. 또한 주석을 추가하여 쿼리를 설명하는 것이 도움이 될 수 있습니다.

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.walking.api.domain.path.dto;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Getter
@ToString
@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class CalculatePathFavoritesTimeUseCaseIn {
private Long favoritesPathId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.walking.api.domain.path.dto;

import com.walking.api.domain.traffic.dto.detail.PointDetail;
import com.walking.api.domain.traffic.dto.detail.TrafficDetail;
import java.time.LocalDateTime;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Getter
@ToString
@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class CalculatePathFavoritesTimeUseCaseOut {
private LocalDateTime nowTime;
private Integer totalTime;
private Integer trafficCount;
private List<LocalDateTime> departureTimes;
private Integer timeToFirstTraffic;
private Integer totalDistance;
private PointDetail startPoint;
private PointDetail endPoint;
private List<TrafficDetail> traffics;
private List<Long> trafficIdsInPath;
private List<PointDetail> paths;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.walking.api.domain.path.dto;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Getter
@ToString
@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class CalculatePathTimeUseCaseIn {
private Double startLat;
private Double startLng;
private Double endLat;
private Double endLng;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.walking.api.domain.path.dto;

import com.walking.api.domain.traffic.dto.detail.PointDetail;
import com.walking.api.domain.traffic.dto.detail.TrafficDetail;
import java.time.LocalDateTime;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Getter
@ToString
@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class CalculatePathTimeUseCaseOut {
private LocalDateTime nowTime;
private Integer totalTime;
private Integer trafficCount;
private List<LocalDateTime> departureTimes;
private Integer timeToFirstTraffic;
private Integer totalDistance;
private PointDetail startPoint;
private PointDetail endPoint;
private List<TrafficDetail> traffics;
private List<Long> trafficIdsInPath;
private List<PointDetail> paths;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.walking.api.domain.path.dto;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Getter
@ToString
@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class DeleteFavoriteRouteUseCaseIn {
private Long memberId;
private Long pathId;
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.walking.api.domain.path.dto;

import com.walking.api.web.dto.request.OrderFilter;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Getter
@ToString
@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class ReadFavoritesPathUseCaseIn {
private Long memberId;
private String name;
private OrderFilter orderFilter;

public boolean isOrderFiltered() {
return orderFilter != null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ReadFavoritesPathUseCaseResponse {

public class ReadFavoritesPathUseCaseOut {
private Long id;
private Point startPoint;
private Point endPoint;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class SavePathFavoritesUseCaseRequest {
public class SavePathFavoritesUseCaseIn {
private Long memberId;
private String name;
private String startName;
private double startLat;
private double startLng;
private Double startLat;
private Double startLng;
private String endName;
private double endLat;
private double endLng;
private Double endLat;
private Double endLng;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UpdateRoutePathNameUseCaseRequest {
public class UpdateRoutePathNameUseCaseIn {
private Long memberId;
private Long pathId;
private String name;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,27 @@
import com.walking.api.domain.client.dto.response.TMapResponseDto;
import com.walking.api.domain.client.dto.response.detail.FeatureDetail;
import com.walking.api.domain.client.dto.response.detail.GeometryDetail;
import com.walking.api.domain.path.dto.PathPrimaryData;
import java.util.ArrayList;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.locationtech.jts.geom.*;

@AllArgsConstructor
public class SearchPath {

private final TMapResponseDto tMapPathData;

public PathPrimaryData extractPrimaryDataByTMap() {
return new PathPrimaryData(
@Data
@AllArgsConstructor
public static class PathPrimaryVO {
private Integer totalTime;
private Integer untilTrafficTime;
private Integer totalDistance;
}

public PathPrimaryVO extractPrimaryDataByTMap() {
return new PathPrimaryVO(
calculateTotalTime(tMapPathData),
calculateUntilFirstTraffic(tMapPathData),
tMapPathData.getFeatureDetails().get(0).getPropertyDetails().getTotalDistance());
Expand Down
Loading
Loading