Skip to content

Commit 42bc362

Browse files
authored
Merge pull request #15 from 2025-OpenData-Project/feature-2-좌표-기반-코스-구성
[FEAT] 랜딩 페이지에 띄울 관광지 정보 반환 API
2 parents f7d8536 + 7ffe757 commit 42bc362

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

src/main/java/com/opendata/domain/apidata/controller/AreaController.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package com.opendata.domain.apidata.controller;
22

3+
import com.opendata.domain.apidata.dto.AreaCongestionDto;
34
import com.opendata.domain.apidata.service.AreaService;
5+
import com.opendata.global.response.ApiResponse;
46
import lombok.RequiredArgsConstructor;
57
import org.springframework.http.ResponseEntity;
68
import org.springframework.web.bind.annotation.GetMapping;
79
import org.springframework.web.bind.annotation.RequestMapping;
810
import org.springframework.web.bind.annotation.RestController;
911

12+
import java.util.List;
13+
1014
@RestController
1115
@RequiredArgsConstructor
1216
@RequestMapping("/api/area")
@@ -20,4 +24,9 @@ public ResponseEntity<Void> getArea()
2024
areaService.fetchAllAreaAndSave();
2125
return ResponseEntity.ok().build();
2226
}
27+
28+
@GetMapping("/list")
29+
public ResponseEntity<ApiResponse<List<AreaCongestionDto>>> getAreaListWithCongestion(){
30+
return ResponseEntity.ok(ApiResponse.onSuccess(areaService.fetchAndConvertAreaCongestionDto()));
31+
}
2332
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.opendata.domain.apidata.dto;
2+
3+
public record AreaCongestionDto(
4+
String spotName,
5+
String congestionLevel
6+
) {
7+
}

src/main/java/com/opendata/domain/apidata/service/AreaService.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,18 @@
22

33

44
import com.opendata.domain.apidata.api.AreaApi;
5+
import com.opendata.domain.apidata.dto.AreaCongestionDto;
56
import com.opendata.domain.apidata.dto.CityDataDto;
67
import com.opendata.domain.apidata.entity.Area;
78
import com.opendata.domain.apidata.repository.AreaRepository;
9+
import com.opendata.global.util.DateUtil;
810
import lombok.RequiredArgsConstructor;
911
import lombok.extern.slf4j.Slf4j;
1012
import org.springframework.scheduling.annotation.Async;
1113
import org.springframework.scheduling.annotation.Scheduled;
1214
import org.springframework.stereotype.Service;
1315

16+
import java.util.Comparator;
1417
import java.util.List;
1518
import java.util.Objects;
1619
import java.util.concurrent.CompletableFuture;
@@ -80,4 +83,21 @@ else if(congestLevel.equals("약간 붐빔"))
8083
}
8184
return area;
8285
}
86+
87+
public List<AreaCongestionDto> mapToClosestTimeList(List<Area> areas, String currentTime) {
88+
return areas.stream()
89+
.map(area -> area.getFutures().stream()
90+
.filter(f -> f.getFcstTime().compareTo(currentTime) <= 0)
91+
.max(Comparator.comparing(CityDataDto.FutureData::getFcstTime))
92+
.map(f -> new AreaCongestionDto(area.getName(), f.getFcstCongestLvl()))
93+
.orElse(null)
94+
)
95+
.filter(Objects::nonNull)
96+
.toList();
97+
}
98+
99+
public List<AreaCongestionDto> fetchAndConvertAreaCongestionDto(){
100+
String currentTime = DateUtil.getCurrentFormattedDateTime();
101+
return mapToClosestTimeList(areaRepository.findAreaWithCongestionByCurrentTime(currentTime), currentTime);
102+
}
83103
}

0 commit comments

Comments
 (0)