Skip to content
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 @@ -6,6 +6,8 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Set;

@Slf4j
@Service
@RequiredArgsConstructor
Expand All @@ -16,7 +18,9 @@ public class AreaCandidateResolver {
public GooglePlaceSearchResponse.Place resolve(
String areaName,
double centerLatitude,
double centerLongitude
double centerLongitude,
Set<String> usedPlaceIds,
Set<String> usedCoordinates
) {

log.info(
Expand All @@ -35,7 +39,11 @@ public GooglePlaceSearchResponse.Place resolve(
);

GooglePlaceSearchResponse.Place subwayPlace =
getValidPlace(subwayResponse);
getValidPlace(
subwayResponse,
usedPlaceIds,
usedCoordinates
);

if (subwayPlace != null) {
return subwayPlace;
Expand All @@ -50,7 +58,11 @@ public GooglePlaceSearchResponse.Place resolve(
);

GooglePlaceSearchResponse.Place transitPlace =
getValidPlace(transitResponse);
getValidPlace(
transitResponse,
usedPlaceIds,
usedCoordinates
);

if (transitPlace != null) {
return transitPlace;
Expand All @@ -64,11 +76,17 @@ public GooglePlaceSearchResponse.Place resolve(
centerLongitude
);

return getValidPlace(areaResponse);
return getValidPlace(
areaResponse,
usedPlaceIds,
usedCoordinates
);
}

private GooglePlaceSearchResponse.Place getValidPlace(
GooglePlaceSearchResponse response
GooglePlaceSearchResponse response,
Set<String> usedPlaceIds,
Set<String> usedCoordinates
) {

if (response == null
Expand All @@ -92,12 +110,43 @@ private GooglePlaceSearchResponse.Place getValidPlace(
return null;
}

if (usedPlaceIds.contains(place.id())) {
log.info(
"지역 좌표 중복 - 이미 사용된 Google Place - placeId={}",
place.id()
);
return null;
}

String coordinateKey =
createCoordinateKey(
place.location().latitude(),
place.location().longitude()
);

if (usedCoordinates.contains(coordinateKey)) {
log.info(
"지역 좌표 중복 - 이미 사용된 좌표 - latitude={}, longitude={}",
place.location().latitude(),
place.location().longitude()
);
return null;
}

log.info(
"지역 좌표 조회 성공 - place=({}, {})",
"지역 좌표 조회 성공 - placeId={}, place=({}, {})",
place.id(),
place.location().latitude(),
place.location().longitude()
);

return place;
}

public String createCoordinateKey(
double latitude,
double longitude
) {
return latitude + "," + longitude;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Service
@RequiredArgsConstructor
Expand Down Expand Up @@ -54,24 +57,51 @@ public RecommendedAreaListResponse getRecommendedAreas(
List<AreaCandidate> candidates =
legalDongCandidateService.generate(center);

Set<String> usedPlaceIds = new HashSet<>();
Set<String> usedCoordinates = new HashSet<>();

List<RecommendedAreaListResponse.Area> areas =
recommendedAreas.stream()
.map(recommendedArea ->
toResponse(
recommendedArea,
center,
candidates
)
)
.toList();
new ArrayList<>();

for (RecommendedArea recommendedArea : recommendedAreas) {

GooglePlaceSearchResponse.Place place =
resolvePlace(
recommendedArea,
center,
candidates,
usedPlaceIds,
usedCoordinates
);

usedPlaceIds.add(place.id());

usedCoordinates.add(
areaCandidateResolver.createCoordinateKey(
place.location().latitude(),
place.location().longitude()
)
);

areas.add(
new RecommendedAreaListResponse.Area(
recommendedArea.getId(),
recommendedArea.getAreaName(),
place.location().latitude(),
place.location().longitude()
)
);
}

return new RecommendedAreaListResponse(areas);
}

private RecommendedAreaListResponse.Area toResponse(
private GooglePlaceSearchResponse.Place resolvePlace(
RecommendedArea recommendedArea,
AreaCenter center,
List<AreaCandidate> candidates
List<AreaCandidate> candidates,
Set<String> usedPlaceIds,
Set<String> usedCoordinates
) {

AreaCandidate candidate =
Expand All @@ -92,7 +122,9 @@ private RecommendedAreaListResponse.Area toResponse(
areaCandidateResolver.resolve(
candidate.searchName(),
center.latitude(),
center.longitude()
center.longitude(),
usedPlaceIds,
usedCoordinates
);

if (place == null || place.location() == null) {
Expand All @@ -101,11 +133,6 @@ private RecommendedAreaListResponse.Area toResponse(
);
}

return new RecommendedAreaListResponse.Area(
recommendedArea.getId(),
recommendedArea.getAreaName(),
place.location().latitude(),
place.location().longitude()
);
return place;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.util.Set;

import static org.assertj.core.api.Assertions.assertThat;

Expand Down Expand Up @@ -73,7 +74,9 @@ class AreaCandidateResolverIntegrationTest {
areaCandidateResolver.resolve(
namMyeon.searchName(),
center.latitude(),
center.longitude()
center.longitude(),
Set.of(),
Set.of()
);

System.out.println(
Expand Down
Loading
Loading