From adb3460c37f124b43ba8c61fbbd199300fbbdc74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=EA=B2=BD?= Date: Tue, 22 Sep 2026 08:36:52 +0900 Subject: [PATCH] =?UTF-8?q?[fix]=20solution/backend:=20site=5Fpayload=20?= =?UTF-8?q?=EB=82=A0=EC=94=A8=20=EB=9D=BC=EB=B2=A8=EB=8F=84=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=EB=B3=84=20=EA=B3=A0=EC=9C=A0=EA=B0=92=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=E2=80=94=20=EC=95=9E=20=EC=BB=A4=EB=B0=8B=20?= =?UTF-8?q?=EB=88=84=EB=9D=BD=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 직전 커밋(cd77171)에서 문서·프론트만 옮기고 서버 쪽 표(site_payload._weather_condition)를 빠뜨렸다. use-live-weather.ts 와 같은 표를 봐야 하이드레이션 전후 문구가 안 바뀐다는 불변식이 절반만 적용된 상태였다 — 여기서 마저 맞춘다. --- solution/backend/services/site_payload.py | 59 ++++++++++++++--------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/solution/backend/services/site_payload.py b/solution/backend/services/site_payload.py index 2d4de04..d690097 100644 --- a/solution/backend/services/site_payload.py +++ b/solution/backend/services/site_payload.py @@ -501,33 +501,48 @@ def _sections(saved_sections, default_spec) -> list: return out -# WMO weather code → 한 줄 날씨. ★ solution/site/src/lib/use-live-weather.ts 의 condition() 과 -# **같은 구간**이어야 한다. 렌더러는 프리렌더된 이 값으로 그리다가 하이드레이션 뒤 최신 캐시로 덮어쓰는데, -# 두 곳이 다른 표를 쓰면 같은 날씨인데 화면 문구가 바뀐다(사장님 눈에는 버그로 보인다). +# WMO weather code → 한 줄 날씨. 코드 하나마다 고유 문구다(뭉치지 않는다) — ★ solution/site/src/lib/ +# use-live-weather.ts 의 WEATHER_CONDITION_BY_CODE 와 **같은 표**여야 한다. 렌더러는 프리렌더된 +# 이 값으로 그리다가 하이드레이션 뒤 최신 캐시로 덮어쓰는데, 두 곳이 다른 표를 쓰면 같은 날씨인데 +# 화면 문구가 바뀐다(사장님 눈에는 버그로 보인다). +_WEATHER_CONDITION_BY_CODE = { + 0: "맑음", + 1: "대체로 맑음", + 2: "구름 조금", + 3: "흐림", + 45: "안개", + 48: "착빙성 안개", + 51: "가벼운 이슬비", + 53: "보통 이슬비", + 55: "강한 이슬비", + 56: "가벼운 착빙성 이슬비", + 57: "강한 착빙성 이슬비", + 61: "약한 비", + 63: "보통 비", + 65: "강한 비", + 66: "약한 착빙성 비", + 67: "강한 착빙성 비", + 71: "약한 눈", + 73: "보통 눈", + 75: "강한 눈", + 77: "싸라기눈", + 80: "약한 소나기", + 81: "보통 소나기", + 82: "강한 소나기", + 85: "약한 소나기눈", + 86: "강한 소나기눈", + 95: "뇌우", + 96: "약한 우박 뇌우", + 99: "강한 우박 뇌우", +} + + def _weather_condition(code) -> str: try: value = int(code) except (TypeError, ValueError): return "흐림" - if value == 0: - return "맑음" - if 1 <= value <= 2: - return "구름많음" - if value == 3: - return "흐림" - if value in (45, 48): - return "안개" - if 51 <= value <= 57: - return "이슬비" - if 61 <= value <= 67: - return "비" - if 71 <= value <= 77 or value in (85, 86): - return "눈" - if 80 <= value <= 82: - return "소나기" - if 95 <= value <= 99: - return "뇌우" - return "흐림" + return _WEATHER_CONDITION_BY_CODE.get(value, "흐림") def _weather(row: dict):