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 @@ -72,7 +72,7 @@ class WeatherApiClient(
fun fetchLandForecast(
regionId: String,
baseTime: String,
): PrecipitationData? {
): LandForecastData? {
val url = "$apiUrl/getMidLandFcst?serviceKey=$serviceKey&numOfRows=10&pageNo=1&regId=$regionId&tmFc=$baseTime&dataType=JSON"

println("🌧️ 중기육상예보조회 API 호출: $url")
Expand All @@ -82,10 +82,10 @@ class WeatherApiClient(
val jsonResponse = restTemplate.getForObject(url, Map::class.java) as? Map<String, Any>
println("📡 중기육상예보 JSON 응답 수신")

jsonResponse?.let { dataParser.parsePrecipitationDataFromJson(it) } ?: PrecipitationData()
jsonResponse?.let { dataParser.parsePrecipitationDataFromJson(it) } ?: LandForecastData()
} catch (e: Exception) {
println("❌ 중기육상예보조회 JSON API 오류: ${e.message}")
PrecipitationData()
LandForecastData()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.back.koreaTravelGuide.domain.ai.weather.client.parser

import com.back.koreaTravelGuide.domain.ai.weather.dto.LandForecastData
import com.back.koreaTravelGuide.domain.ai.weather.dto.LandForecastInfo
import com.back.koreaTravelGuide.domain.ai.weather.dto.TemperatureData
import com.back.koreaTravelGuide.domain.ai.weather.dto.TemperatureInfo
import org.springframework.stereotype.Component
Expand Down Expand Up @@ -36,7 +38,7 @@ class DataParser {

// 기온 데이터 JSON 파싱
fun parseTemperatureDataFromJson(jsonResponse: Map<String, Any>): TemperatureData {
val TemperatureData = TemperatureData()
val temperatureData = TemperatureData()

for (day in 4..10) {
val minTemp = (extractJsonValue(jsonResponse, "response.body.items.item[0].taMin$day") as? Number)?.toInt()
Expand All @@ -55,16 +57,16 @@ class DataParser {
maxTempRange = if (maxTempLow != null && maxTempHigh != null) "$maxTempLow~$maxTempHigh℃" else null,
)

TemperatureData.setDay(day, tempInfo)
temperatureData.setDay(day, tempInfo)
}
}

return TemperatureData
return temperatureData
}

// 강수 확률 데이터 JSON 파싱
fun parsePrecipitationDataFromJson(jsonResponse: Map<String, Any>): PrecipitationData {
val precipitationData = PrecipitationData()
fun parsePrecipitationDataFromJson(jsonResponse: Map<String, Any>): LandForecastData {
val landForecastData = LandForecastData()

for (day in 4..10) {
if (day <= 7) {
Expand All @@ -76,14 +78,14 @@ class DataParser {

if (amRain != null || pmRain != null || !amWeather.isNullOrBlank() || !pmWeather.isNullOrBlank()) {
val precipInfo =
PrecipitationInfo(
LandForecastInfo(
amRainPercent = amRain,
pmRainPercent = pmRain,
amWeather = amWeather,
pmWeather = pmWeather,
)

precipitationData.setDay(day, precipInfo)
landForecastData.setDay(day, precipInfo)
}
} else {
// 8~10일: 통합 (오전/오후 구분 없음)
Expand All @@ -92,18 +94,18 @@ class DataParser {

if (rainPercent != null || !weather.isNullOrBlank()) {
val precipInfo =
PrecipitationInfo(
LandForecastInfo(
amRainPercent = rainPercent,
pmRainPercent = null,
amWeather = weather,
pmWeather = null,
)

precipitationData.setDay(day, precipInfo)
landForecastData.setDay(day, precipInfo)
}
}
}

return precipitationData
return landForecastData
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,51 @@
package com.back.koreaTravelGuide.domain.ai.weather.dto

data class LandForecastData()
@Suppress("unused") // JSON 직렬화를 위해 필요
class LandForecastData(
private val days: MutableMap<Int, LandForecastInfo?> = mutableMapOf(),
) {
fun setDay(
day: Int,
info: LandForecastInfo?,
) {
days[day] = info
}

fun getDay(day: Int): LandForecastInfo? = days[day]

var day4: LandForecastInfo? get() = days[4]
set(value) {
days[4] = value
}
var day5: LandForecastInfo? get() = days[5]
set(value) {
days[5] = value
}
var day6: LandForecastInfo? get() = days[6]
set(value) {
days[6] = value
}
var day7: LandForecastInfo? get() = days[7]
set(value) {
days[7] = value
}
var day8: LandForecastInfo? get() = days[8]
set(value) {
days[8] = value
}
var day9: LandForecastInfo? get() = days[9]
set(value) {
days[9] = value
}
var day10: LandForecastInfo? get() = days[10]
set(value) {
days[10] = value
}
}

data class LandForecastInfo(
val amRainPercent: Int?,
val pmRainPercent: Int?,
val amWeather: String?,
val pmWeather: String?,
)
Original file line number Diff line number Diff line change
@@ -1,48 +1,48 @@
package com.back.koreaTravelGuide.domain.ai.weather.dto

import kotlin.text.set

// TODO: 날씨 내부 데이터 구조 - 기상청 API 응답 데이터 매핑용 내부 클래스들
@Suppress("unused") // JSON 직렬화를 위해 필요
data class TemperatureData(
class TemperatureData(
private val days: MutableMap<Int, TemperatureInfo?> = mutableMapOf(),
) {
fun setDay(
day: Int,
info: TemperatureInfo?,
) {
days[day] set info
days[day] = info
}

fun getDay(day: Int): TemperatureInfo? = days[day]

var day4: TemperatureInfo? get() = days[4]
var day4: TemperatureInfo?
get() = days[4]
set(value) {
days[4] set value
days[4] = value
}

var day5: TemperatureInfo? get() = days[5]
set(value) {
days[5] set value
days[5] = value
}
var day6: TemperatureInfo? get() = days[6]
set(value) {
days[6] set value
days[6] = value
}
var day7: TemperatureInfo? get() = days[7]
set(value) {
days[7] set value
days[7] = value
}
var day8: TemperatureInfo? get() = days[8]
set(value) {
days[8] set value
days[8] = value
}
var day9: TemperatureInfo? get() = days[9]
set(value) {
days[9] set value
days[9] = value
}
var day10: TemperatureInfo? get() = days[10]
set(value) {
days[10] set value
days[10] = value
}
}

Expand Down