From 4b6996b0f783c4abb3b8771c67ba92f9087a9244 Mon Sep 17 00:00:00 2001 From: gahusb Date: Sat, 23 May 2026 01:52:05 +0900 Subject: [PATCH] =?UTF-8?q?feat(lotto-agent):=20get=5Fagent=5Ftasks=20?= =?UTF-8?q?=ED=95=84=ED=84=B0=20+=20get=5Ftasks=5Fby=5Fagent=5Fdate=5Fkind?= =?UTF-8?q?=20=EB=A9=B1=EB=93=B1=20guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- agent-office/app/db.py | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/agent-office/app/db.py b/agent-office/app/db.py index 66ae60f..4eeea3d 100644 --- a/agent-office/app/db.py +++ b/agent-office/app/db.py @@ -236,12 +236,24 @@ def get_task(task_id: str) -> Optional[Dict[str, Any]]: return _task_to_dict(r) if r else None -def get_agent_tasks(agent_id: str, limit: int = 20) -> List[Dict[str, Any]]: +def get_agent_tasks( + agent_id: str, + limit: int = 20, + task_type: Optional[str] = None, + days: Optional[int] = None, +) -> List[Dict[str, Any]]: + sql = "SELECT * FROM agent_tasks WHERE agent_id=?" + params: List[Any] = [agent_id] + if task_type is not None: + sql += " AND task_type=?" + params.append(task_type) + if days is not None and days > 0: + sql += " AND created_at >= datetime('now', ?)" + params.append(f"-{int(days)} days") + sql += " ORDER BY created_at DESC LIMIT ?" + params.append(limit) with _conn() as conn: - rows = conn.execute( - "SELECT * FROM agent_tasks WHERE agent_id=? ORDER BY created_at DESC LIMIT ?", - (agent_id, limit), - ).fetchall() + rows = conn.execute(sql, params).fetchall() return [_task_to_dict(r) for r in rows] @@ -739,3 +751,18 @@ def get_all_baselines() -> List[Dict[str, Any]]: d["window_values"] = json.loads(d["window_values"]) out.append(d) return out + + +def get_tasks_by_agent_date_kind(agent_id: str, date_iso: str, task_type: str) -> List[Dict[str, Any]]: + """같은 (agent, date, task_type)으로 이미 생성된 task 조회. 멱등 guard.""" + with _conn() as conn: + rows = conn.execute( + """ + SELECT * FROM agent_tasks + WHERE agent_id = ? AND task_type = ? + AND substr(created_at, 1, 10) = ? + ORDER BY created_at DESC + """, + (agent_id, task_type, date_iso), + ).fetchall() + return [_task_to_dict(r) for r in rows]