From ee61405ff1b291a8ae8e0ffcbff1b2464a1a6948 Mon Sep 17 00:00:00 2001 From: gahusb Date: Sat, 23 May 2026 01:59:56 +0900 Subject: [PATCH] feat(lotto-agent): run_weekly_evolution_report task_id wrap Co-Authored-By: Claude Sonnet 4.6 --- agent-office/app/agents/lotto.py | 21 ++++++++---- agent-office/tests/test_lotto_task_wrap.py | 38 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 7 deletions(-) diff --git a/agent-office/app/agents/lotto.py b/agent-office/app/agents/lotto.py index 0418e25..ad752a3 100644 --- a/agent-office/app/agents/lotto.py +++ b/agent-office/app/agents/lotto.py @@ -156,23 +156,30 @@ class LottoAgent(BaseAgent): return {"ok": False, "message": f"{type(e).__name__}: {e}"} async def run_weekly_evolution_report(self) -> dict: - """토 22:15 — lotto-lab evaluate-now 트리거 후 텔레그램 리포트.""" + """토 22:15 — lotto-lab evaluate-now 트리거 후 텔레그램 리포트. task_id wrap.""" from ..service_proxy import lotto_evolver_evaluate, lotto_evolver_status from ..notifiers.telegram_lotto import send_evolution_report - from ..db import add_log + from ..db import create_task, update_task_status, add_log + task_id = create_task("lotto", "weekly_evolution_report", {}) try: eval_result = await lotto_evolver_evaluate() status = await lotto_evolver_status() current_base = status.get("current_base") or [0.2] * 5 await send_evolution_report(eval_result, current_base) - add_log( - self.agent_id, - f"weekly_evolution_report 발송: draw={eval_result.get('draw_no')} reason={eval_result.get('update_reason')}", - ) + + winner = eval_result.get("winner") or {} + update_task_status(task_id, "succeeded", result_data={ + "draw_no": eval_result.get("draw_no"), + "update_reason": eval_result.get("update_reason"), + "winner_day_of_week": winner.get("day_of_week"), + "winner_max_correct": winner.get("max_correct"), + }) + add_log("lotto", f"weekly_evolution_report 발송: draw={eval_result.get('draw_no')} reason={eval_result.get('update_reason')}", task_id=task_id) return {"ok": True, **eval_result} except Exception as e: - add_log(self.agent_id, f"weekly_evolution_report 예외: {e}", level="error") + update_task_status(task_id, "failed", result_data={"error": str(e)}) + add_log("lotto", f"weekly_evolution_report 예외: {e}", level="error", task_id=task_id) return {"ok": False, "message": f"{type(e).__name__}: {e}"} async def _run(self, source: str) -> dict: diff --git a/agent-office/tests/test_lotto_task_wrap.py b/agent-office/tests/test_lotto_task_wrap.py index b91094c..5cf72dc 100644 --- a/agent-office/tests/test_lotto_task_wrap.py +++ b/agent-office/tests/test_lotto_task_wrap.py @@ -112,3 +112,41 @@ async def test_run_daily_digest_creates_task(monkeypatch): assert tasks[0]["status"] == "succeeded" assert "fired" in tasks[0]["result_data"] assert "evaluated" in tasks[0]["result_data"] + + +@pytest.mark.asyncio +async def test_run_weekly_evolution_report_creates_task(monkeypatch): + """run_weekly_evolution_report이 task 생성 + result_data 저장.""" + from app.agents.lotto import LottoAgent + from app import service_proxy + from app.notifiers import telegram_lotto + + async def fake_eval(): + return { + "ok": True, "draw_no": 1225, + "winner": {"day_of_week": 3, "weight": [0.18, 0.32, 0.20, 0.22, 0.08], + "avg_score": 0.42, "max_correct": 4, "n_picks": 5}, + "new_base": [0.18, 0.32, 0.20, 0.22, 0.08], + "previous_base": [0.2] * 5, + "update_reason": "winner_4plus", + } + async def fake_status(): + return {"current_base": [0.2] * 5} + async def fake_send(_e, _b): pass + + monkeypatch.setattr(service_proxy, "lotto_evolver_evaluate", fake_eval) + monkeypatch.setattr(service_proxy, "lotto_evolver_status", fake_status) + monkeypatch.setattr(telegram_lotto, "send_evolution_report", fake_send) + + agent = LottoAgent() + result = await agent.run_weekly_evolution_report() + assert result["ok"] is True + + tasks = db.get_agent_tasks("lotto", task_type="weekly_evolution_report", days=1) + assert len(tasks) == 1 + r = tasks[0]["result_data"] + assert tasks[0]["status"] == "succeeded" + assert r["draw_no"] == 1225 + assert r["update_reason"] == "winner_4plus" + assert r["winner_day_of_week"] == 3 + assert r["winner_max_correct"] == 4