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 @@ -44,6 +44,20 @@ public CommonResponse<RouteCreateResponseDto> createByAI(
return CommonResponse.onSuccess(response);
}

@Operation(
summary = "루트 시작",
description = "현재 위치와 루트 ID를 받아 현재 → 1번째, i번째 → i+1번째 구간의 단계별 길찾기 정보를 반환합니다."
)
@PostMapping("/{route_id}/start")
public CommonResponse<StartRouteResponse> startRoute(
@PathVariable("route_id") Long routeId,
@RequestParam double latitude,
@RequestParam double longitude
) {
StartRouteResponse response = routeService.startRoute(routeId, latitude, longitude);
return CommonResponse.onSuccess(response);
}

@Operation(
summary = "추천 루트 조회",
description = "추천 루트들을 조회한 결과를 반환합니다."
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.mey.backend.domain.route.dto;

import lombok.Builder;
import lombok.Getter;

import java.util.List;

@Getter
@Builder
public class StartRouteResponse {
private List<TransitSegmentDto> segments;
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,55 @@ public class RouteService {
private final PlaceRepository placeRepository;
private final SequencePlanner sequencePlanner; // GptSequencePlanner 구현체 주입

@Transactional(readOnly = true)
public StartRouteResponse startRoute(Long routeId, double latitude, double longitude) {
Route route = routeRepository.findById(routeId)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 루트입니다."));

List<RoutePlace> routePlaces = routePlaceRepository.findByRouteIdOrderByVisitOrder(routeId);

List<Place> places = routePlaces.stream()
.map(RoutePlace::getPlace) // 중간 엔티티에서 Place 꺼내기
.toList();
if (places.isEmpty()) {
throw new IllegalStateException("루트에 장소가 없습니다.");
}

List<TransitSegmentDto> segments = new ArrayList<>();

// 현재 위치 → 첫 번째 장소
Place firstPlace = places.get(0);
segments.add(
transitClient.route(
"현재 위치",
latitude, longitude,
firstPlace.getNameKo(),
firstPlace.getLatitude(), firstPlace.getLongitude(),
null
)
);

// i → i+1
for (int i = 0; i < places.size() - 1; i++) {
Place from = places.get(i);
Place to = places.get(i + 1);

segments.add(
transitClient.route(
from.getNameKo(),
from.getLatitude(), from.getLongitude(),
to.getNameKo(),
to.getLatitude(), to.getLongitude(),
null
)
);
}

return StartRouteResponse.builder()
.segments(segments)
.build();
}

@Transactional
public RouteCreateResponseDto createRouteByAI(CreateRouteByPlaceIdsRequestDto req) {
// 1) 검증
Expand Down