Skip to content

Commit 01d51b1

Browse files
authored
Merge pull request #24 from Nexters/feature/23-current-weather-max-min-temp-bug
[#23] 오늘 날씨 최고/최저 기온 업데이트 오류 수정
2 parents 52eb036 + 94582ef commit 01d51b1

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/main/kotlin/nexters/weski/batch/ExternalWeatherService.kt

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,13 @@ class ExternalWeatherService(
2929

3030
@Transactional
3131
fun updateCurrentWeather() {
32-
val baseDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))
3332
val baseTime = getBaseTime()
33+
val baseLocalDateTime = if (baseTime == "2300") {
34+
LocalDateTime.now().minusDays(1)
35+
} else {
36+
LocalDateTime.now()
37+
}
38+
val baseDate = baseLocalDateTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"))
3439
skiResortRepository.findAll().forEach { resort ->
3540
val url = "https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst" +
3641
"?serviceKey=$apiKey" +
@@ -62,6 +67,9 @@ class ExternalWeatherService(
6267
private fun getBaseTime(): String {
6368
val now = LocalDateTime.now().minusHours(1)
6469
val hour = now.hour.toString().padStart(2, '0')
70+
if (hour == "23") {
71+
return "0000"
72+
}
6573
return "${hour}00"
6674
}
6775

@@ -91,11 +99,21 @@ class ExternalWeatherService(
9199
val feelsLike = calculateFeelsLike(temperature, windSpeed)
92100
val condition = determineCondition(data)
93101
val description = generateDescription(condition, temperature)
94-
102+
val dailyWeather = dailyWeatherRepository.findBySkiResortAndForecastDate(resort, LocalDate.now())[0]
103+
// dailyWeather.maxTemp보다 temperature이 높으면 maxTemp를 업데이트
104+
if (temperature > dailyWeather.maxTemp) {
105+
dailyWeather.maxTemp = temperature
106+
dailyWeatherRepository.save(dailyWeather)
107+
}
108+
// dailyWeather.minTemp보다 temperature이 낮으면 minTemp을 업데이트
109+
if (temperature < dailyWeather.minTemp) {
110+
dailyWeather.minTemp = temperature
111+
dailyWeatherRepository.save(dailyWeather)
112+
}
95113
return CurrentWeather(
96114
temperature = temperature,
97-
maxTemp = data["TMX"]?.toDoubleOrNull()?.toInt() ?: temperature,
98-
minTemp = data["TMN"]?.toDoubleOrNull()?.toInt() ?: temperature,
115+
maxTemp = dailyWeather.maxTemp,
116+
minTemp = dailyWeather.minTemp,
99117
feelsLike = feelsLike,
100118
condition = condition,
101119
description = description,

src/main/kotlin/nexters/weski/weather/DailyWeatherRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package nexters.weski.weather
22

33
import nexters.weski.ski_resort.SkiResort
44
import org.springframework.data.jpa.repository.JpaRepository
5+
import java.time.LocalDate
56

67
interface DailyWeatherRepository : JpaRepository<DailyWeather, Long> {
78
fun findAllBySkiResortResortId(resortId: Long): List<DailyWeather>
89
fun deleteByDDayGreaterThanEqual(dDay: Int)
910
fun findBySkiResortAndDDay(skiResort: SkiResort, dDay: Int): DailyWeather?
11+
fun findBySkiResortAndForecastDate(skiResort: SkiResort, forecastDate: LocalDate): List<DailyWeather>
1012
}

0 commit comments

Comments
 (0)