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 @@ -2,7 +2,6 @@

import com.fasterxml.jackson.annotation.JsonInclude;
import com.pinHouse.server.core.util.TimeFormatter;
import com.pinHouse.server.platform.housing.complex.application.dto.response.TransitRoutesResponse.SegmentResponse;
import com.pinHouse.server.platform.housing.complex.domain.entity.ComplexDocument;
import com.pinHouse.server.platform.housing.complex.domain.entity.UnitType;
import com.pinHouse.server.platform.housing.facility.application.dto.NoticeFacilityListResponse;
Expand Down Expand Up @@ -47,19 +46,19 @@ public record ComplexDetailResponse(
String totalTime,

@Schema(description = "전체 λŒ€μ€‘κ΅ν†΅ 정보 (μž„λŒ€μ£Όνƒ μƒμ„Έμ‘°νšŒμš©)")
List<SegmentResponse> distance
TransitInfoResponse distance
) {

/// 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œ - μž„λŒ€μ£Όνƒ μƒμ„Έμ‘°νšŒμš© (SegmentResponse 리슀트 포함)
public static ComplexDetailResponse from(ComplexDocument document, NoticeFacilityListResponse facilities, List<SegmentResponse> distance) {
/// 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œ - μž„λŒ€μ£Όνƒ μƒμ„Έμ‘°νšŒμš© (TransitInfoResponse 포함)
public static ComplexDetailResponse from(ComplexDocument document, NoticeFacilityListResponse facilities, TransitInfoResponse transitInfo) {

return ComplexDetailResponse.builder()
.id(document.getId())
.name(document.getName())
.address(extractRegion(document.getAddress().getFull()))
.heating(document.getHeating())
.totalHouseholds(
document.getTotalHouseholds() == null || document.getTotalHouseholds().equals("")
document.getTotalHouseholds() == null || document.getTotalHouseholds().isEmpty()
? 0
: Integer.parseInt(document.getTotalHouseholds())
)
Expand All @@ -70,7 +69,7 @@ public static ComplexDetailResponse from(ComplexDocument document, NoticeFacilit
.map(UnitType::getTypeCode)
.toList())
.totalTime(null)
.distance(distance)
.distance(transitInfo)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.pinHouse.server.platform.housing.complex.application.dto.response;

import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;

import java.util.List;

/**
* λŒ€μ€‘κ΅ν†΅ 경둜 전체 정보 (총 μ‹œκ°„/거리 + ꡬ간별 정보)
*/
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@Schema(name = "[응닡][λŒ€μ€‘κ΅ν†΅] 경둜 전체 정보", description = "λŒ€μ€‘κ΅ν†΅ 경둜의 총 μ‹œκ°„/거리와 ꡬ간별 μ„ΈλΆ€ 정보")
public record TransitInfoResponse(

@Schema(description = "총 μ†Œμš” μ‹œκ°„ (ν…μŠ€νŠΈ)", example = "μ•½ 1μ‹œκ°„ 23λΆ„")
String totalTime,

@Schema(description = "총 μ†Œμš” μ‹œκ°„ (λΆ„)", example = "83")
Integer totalTimeMinutes,

@Schema(description = "총 거리 (km)", example = "39.6")
Double totalDistance,

@Schema(description = "ꡬ간별 μ„ΈλΆ€ 정보")
List<TransitRoutesResponse.SegmentResponse> segments
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ public ComplexDetailResponse getComplex(String id, String pinPointId) throws Uns
/// μ£Όλ³€ 인프라 쑰회
NoticeFacilityListResponse nearFacilities = facilityService.getNearFacilities(complex.getId());

/// 거리 계산 - Segment 리슀트둜 λ³€ν™˜
List<TransitRoutesResponse.SegmentResponse> segments = getSegments(id, pinPointId);
/// 거리 계산 - TransitInfo 생성
TransitInfoResponse transitInfo = getTransitInfo(id, pinPointId);

/// 리턴
return ComplexDetailResponse.from(complex, nearFacilities, segments);
return ComplexDetailResponse.from(complex, nearFacilities, transitInfo);

}

Expand Down Expand Up @@ -466,7 +466,17 @@ private <T> T calculateTransitRoute(
return pathMapper.apply(pathResult);
}

/// Segment 리슀트 쑰회 (μž„λŒ€μ£Όνƒ μƒμ„Έμ‘°νšŒμš©)
/// TransitInfo 쑰회 (μž„λŒ€μ£Όνƒ μƒμ„Έμ‘°νšŒμš©)
@Transactional(readOnly = true)
public TransitInfoResponse getTransitInfo(String id, String pinPointId) throws UnsupportedEncodingException {
return calculateTransitRoute(id, pinPointId, pathResult -> {
RootResult rootResult = mapper.selectBest(pathResult);
return mapper.toTransitInfoResponse(rootResult);
});
}

/// Segment 리슀트 쑰회 (μž„λŒ€μ£Όνƒ μƒμ„Έμ‘°νšŒμš©) - Deprecated, use getTransitInfo instead
@Deprecated
@Transactional(readOnly = true)
public List<TransitRoutesResponse.SegmentResponse> getSegments(String id, String pinPointId) throws UnsupportedEncodingException {
return calculateTransitRoute(id, pinPointId, pathResult -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.pinHouse.server.core.util.TimeFormatter;
import com.pinHouse.server.platform.housing.complex.application.dto.response.ChipType;
import com.pinHouse.server.platform.housing.complex.application.dto.response.DistanceResponse;
import com.pinHouse.server.platform.housing.complex.application.dto.response.TransitInfoResponse;
import com.pinHouse.server.platform.housing.complex.application.dto.response.TransitRoutesResponse;
import com.pinHouse.server.platform.housing.complex.application.dto.result.PathResult;
import com.pinHouse.server.platform.housing.complex.application.dto.result.RootResult;
Expand Down Expand Up @@ -237,6 +238,30 @@ private int countTransfers(RootResult route) {
return (int) Math.max(0, transportCount - 1);
}

/**
* TransitInfoResponse 생성 (전체 경둜 정보 + ꡬ간별 정보)
*/
public TransitInfoResponse toTransitInfoResponse(RootResult route) {
if (route == null) {
return null;
}

// 전체 경둜의 총 μ‹œκ°„, 거리 계산
int totalMinutes = route.totalTime();
String totalTimeText = TimeFormatter.formatTime(totalMinutes);
double totalDistanceKm = Math.round(route.totalDistance() / 100.0) / 10.0;

// ꡬ간별 정보 생성
List<TransitRoutesResponse.SegmentResponse> segments = toSegmentResponses(route);

return TransitInfoResponse.builder()
.totalTime(totalTimeText)
.totalTimeMinutes(totalMinutes)
.totalDistance(totalDistanceKm)
.segments(segments)
.build();
}

/**
* Segments 생성 (색 λ§‰λŒ€μš©)
*/
Expand Down
Loading