File size: 1,753 Bytes
aa08cd6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | """notes 表的读写:笔记正文(content)与任务状态(status)。
取代原先 note_results/{task_id}.json 与 {task_id}.status.json 两个本地文件。
content 与 status 各自独立 upsert,互不覆盖。
"""
from typing import Any, Dict, Optional
from app.db.engine import SessionLocal
from app.db.models.note import Note
def _upsert(task_id: str, **fields) -> None:
with SessionLocal() as db:
row = db.get(Note, task_id)
if row is None:
row = Note(task_id=task_id)
db.add(row)
for key, val in fields.items():
setattr(row, key, val)
db.commit()
def save_note(task_id: str, content: Dict[str, Any]) -> None:
"""写笔记正文(不动 status)。"""
_upsert(task_id, content=content)
def load_note(task_id: str) -> Optional[Dict[str, Any]]:
"""读笔记正文;不存在返回 None。"""
with SessionLocal() as db:
row = db.get(Note, task_id)
return row.content if row is not None and row.content is not None else None
def set_status(task_id: str, status_data: Dict[str, Any]) -> None:
"""写任务状态字典 {status, paused, message?, cache?}(不动 content)。"""
_upsert(task_id, status=status_data)
def get_status(task_id: str) -> Optional[Dict[str, Any]]:
"""读任务状态;不存在返回 None。"""
with SessionLocal() as db:
row = db.get(Note, task_id)
return row.status if row is not None and row.status is not None else None
def delete_note(task_id: str) -> None:
"""删除笔记行(正文 + 状态)。"""
with SessionLocal() as db:
row = db.get(Note, task_id)
if row is not None:
db.delete(row)
db.commit()
|