"""순환 문구를 fact 한 칸에 담는 글 형식 — 사장님이 빌더에서 줄 단위로 고칠 수 있게 JSON 이 아니라 글로 둔다. 한 줄에 한 문구. 앞에 `봄 | ` · `9월 | ` · `비 | ` 를 붙이면 계절·월·날씨 문구, 없으면 일반 문구다. """ import re SEASONS = ("봄", "여름", "가을", "겨울") WEATHERS = ("맑음", "흐림", "비", "눈") _MONTH = re.compile(r"^(1[0-2]|[1-9])월$") def encode(items: list[dict]) -> str: lines = [] for item in items: text = str(item.get("text") or "").strip() if not text: continue kind = item.get("kind") or "general" tag = {"season": item.get("season"), "month": f"{item.get('month')}월", "weather": item.get("weather")}.get(kind) lines.append(f"{tag} | {text}" if tag else text) return "\n".join(lines) def decode(value: str) -> list[dict]: items: list[dict] = [] for raw in (value or "").splitlines(): line = raw.strip() if not line: continue tag, sep, rest = line.partition("|") tag, rest = tag.strip(), rest.strip() if sep and rest: if tag in SEASONS: items.append({"text": rest, "kind": "season", "season": tag}) continue if tag in WEATHERS: items.append({"text": rest, "kind": "weather", "weather": tag}) continue if m := _MONTH.match(tag): items.append({"text": rest, "kind": "month", "month": int(m.group(1))}) continue items.append({"text": line, "kind": "general"}) return items