diff --git a/src/main/kotlin/com/back/koreaTravelGuide/application/KoreaTravelGuideApplication.kt b/src/main/kotlin/com/back/koreaTravelGuide/KoreaTravelGuideApplication.kt similarity index 94% rename from src/main/kotlin/com/back/koreaTravelGuide/application/KoreaTravelGuideApplication.kt rename to src/main/kotlin/com/back/koreaTravelGuide/KoreaTravelGuideApplication.kt index b3103ea..cc2558b 100644 --- a/src/main/kotlin/com/back/koreaTravelGuide/application/KoreaTravelGuideApplication.kt +++ b/src/main/kotlin/com/back/koreaTravelGuide/KoreaTravelGuideApplication.kt @@ -1,4 +1,4 @@ -package com.back.koreaTravelGuide.application +package com.back.koreaTravelGuide // TODO: 메인 애플리케이션 클래스 - 스프링 부트 시작점 및 환경변수 로딩 import io.github.cdimascio.dotenv.dotenv diff --git a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/aiChat/controller/ChatController.kt b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/aiChat/controller/ChatController.kt index 3788bcd..9b6c6b1 100644 --- a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/aiChat/controller/ChatController.kt +++ b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/aiChat/controller/ChatController.kt @@ -117,7 +117,7 @@ class ChatController( return emitter } -// 날씨 API 직접 테스트용 엔드포인트 + // 날씨 API 직접 테스트용 엔드포인트 @GetMapping("/weather/test") fun testWeather( @RequestParam(required = false) baseTime: String?, diff --git a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/LandForecastData.kt b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/LandForecastData.kt index c445dd0..09fbcb5 100644 --- a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/LandForecastData.kt +++ b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/LandForecastData.kt @@ -1,7 +1,7 @@ package com.back.koreaTravelGuide.domain.ai.weather.dto @Suppress("unused") // JSON 직렬화를 위해 필요 -class LandForecastData( +data class LandForecastData( private val days: MutableMap = mutableMapOf(), ) { fun setDay( diff --git a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/MidForecastDto.kt b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/MidForecastDto.kt index 97403ef..e600d4b 100644 --- a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/MidForecastDto.kt +++ b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/MidForecastDto.kt @@ -1,10 +1,10 @@ package com.back.koreaTravelGuide.domain.ai.weather.dto data class MidForecastDto( - val regionCode: String, - val baseTime: String, - val precipitation: String, - val temperature: String, - val maritime: String, - val variability: String, + val regionCode: String?, + val baseTime: String?, + val precipitation: String?, + val temperature: String?, + val maritime: String?, + val variability: String?, ) diff --git a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/TemperatureAndLandForecastDto.kt b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/TemperatureAndLandForecastDto.kt index 307d08b..1e49e06 100644 --- a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/TemperatureAndLandForecastDto.kt +++ b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/TemperatureAndLandForecastDto.kt @@ -1,5 +1,14 @@ package com.back.koreaTravelGuide.domain.ai.weather.dto data class TemperatureAndLandForecastDto( - val a: String, + val regionCode: String?, + val baseTime: String?, + val minTemp: Int?, + val maxTemp: Int?, + val minTempRange: String?, + val maxTempRange: String?, + val amRainPercent: Int?, + val pmRainPercent: Int?, + val amWeather: String?, + val pmWeather: String?, ) diff --git a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/TemperatureData.kt b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/TemperatureData.kt index 3b1531b..41fe369 100644 --- a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/TemperatureData.kt +++ b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/TemperatureData.kt @@ -2,7 +2,7 @@ package com.back.koreaTravelGuide.domain.ai.weather.dto // TODO: 날씨 내부 데이터 구조 - 기상청 API 응답 데이터 매핑용 내부 클래스들 @Suppress("unused") // JSON 직렬화를 위해 필요 -class TemperatureData( +data class TemperatureData( private val days: MutableMap = mutableMapOf(), ) { fun setDay( diff --git a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/parser/DtoParser.kt b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/parser/DtoParser.kt index 744d66a..d34a789 100644 --- a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/parser/DtoParser.kt +++ b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/dto/parser/DtoParser.kt @@ -56,11 +56,49 @@ class DtoParser { } fun parseTemperatureAndLandForecast( + regionCode: String, + baseTime: String, temperatureData: TemperatureData, landForecastData: LandForecastData, - ): TemperatureAndLandForecastDto { - return TemperatureAndLandForecastDto( - "a", - ) + ): List { + val resultList = mutableListOf() + + for (i in 4..10) { + val tempInfo = temperatureData.getDay(i) + val landInfo = landForecastData.getDay(i) + + if (tempInfo == null || landInfo == null) { + continue + } + + val minTemp = tempInfo.minTemp + val maxTemp = tempInfo.maxTemp + val minTempRange = tempInfo.minTempRange + val maxTempRange = tempInfo.maxTempRange + + val amRainPercent = landInfo.amRainPercent + val pmRainPercent = landInfo.pmRainPercent + val amWeather = landInfo.amWeather + val pmWeather = landInfo.pmWeather + + // 각 날짜별로 필요한 처리를 수행합니다. + val dto = + TemperatureAndLandForecastDto( + regionCode = regionCode, + baseTime = baseTime, + minTemp = minTemp, + maxTemp = maxTemp, + minTempRange = minTempRange, + maxTempRange = maxTempRange, + amRainPercent = amRainPercent, + pmRainPercent = pmRainPercent, + amWeather = amWeather, + pmWeather = pmWeather, + ) + + resultList.add(dto) + } + + return resultList } } diff --git a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/service/WeatherService.kt b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/service/WeatherService.kt index 355ed7d..bef4bb2 100644 --- a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/service/WeatherService.kt +++ b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/service/WeatherService.kt @@ -34,13 +34,13 @@ class WeatherService( fun fetchTemperatureAndLandForecast( actualRegionCode: String, actualBaseTime: String, - ): TemperatureAndLandForecastDto? { + ): List? { val tempInfo = weatherApiClient.fetchTemperature(actualRegionCode, actualBaseTime) val landInfo = weatherApiClient.fetchLandForecast(actualRegionCode, actualBaseTime) if (tempInfo == null || landInfo == null) return null - return parser.parseTemperatureAndLandForecast(tempInfo, landInfo) + return parser.parseTemperatureAndLandForecast(actualRegionCode, actualBaseTime, tempInfo, landInfo) } @CacheEvict(cacheNames = ["weatherMidFore", "weatherTempAndLandFore"], allEntries = true) diff --git a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/service/WeatherServiceCore.kt b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/service/WeatherServiceCore.kt index ef1f200..987cc6b 100644 --- a/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/service/WeatherServiceCore.kt +++ b/src/main/kotlin/com/back/koreaTravelGuide/domain/ai/weather/service/WeatherServiceCore.kt @@ -22,7 +22,7 @@ class WeatherServiceCore( location: String?, regionCode: String?, baseTime: String?, - ): TemperatureAndLandForecastDto? { + ): List? { val actualLocation = location ?: "서울" val actualRegionCode = regionCode ?: tools.getRegionCodeFromLocation(actualLocation) diff --git a/src/test/kotlin/com/back/koreaTravelGuide/WeatherApiRealTest.kt b/src/test/kotlin/com/back/koreaTravelGuide/WeatherApiRealTest.kt index b7512f5..951f839 100644 --- a/src/test/kotlin/com/back/koreaTravelGuide/WeatherApiRealTest.kt +++ b/src/test/kotlin/com/back/koreaTravelGuide/WeatherApiRealTest.kt @@ -1,5 +1,3 @@ -package com.back.koreaTravelGuide.application - import com.fasterxml.jackson.databind.ObjectMapper import io.github.cdimascio.dotenv.dotenv import org.junit.jupiter.api.BeforeAll diff --git a/src/test/kotlin/com/back/koreaTravelGuide/domain/ai/tour/client/TourApiClientTest.kt b/src/test/kotlin/com/back/koreaTravelGuide/domain/ai/tour/client/TourApiClientTest.kt index d742685..a9d0e29 100644 --- a/src/test/kotlin/com/back/koreaTravelGuide/domain/ai/tour/client/TourApiClientTest.kt +++ b/src/test/kotlin/com/back/koreaTravelGuide/domain/ai/tour/client/TourApiClientTest.kt @@ -1,6 +1,6 @@ package com.back.koreaTravelGuide.domain.ai.tour.client -import com.back.koreaTravelGuide.application.KoreaTravelGuideApplication +import com.back.koreaTravelGuide.KoreaTravelGuideApplication import com.back.koreaTravelGuide.domain.ai.tour.dto.InternalData import com.back.koreaTravelGuide.domain.ai.tour.dto.TourResponse import com.fasterxml.jackson.databind.ObjectMapper