user_id = await get_user() if not user_id: return json.dumps([], ensure_ascii=False) try: async with get_sor_context(request._run_ns, "pipeline") as sor: sql = """ SELECT b.id, b.title, b.severity, b.priority, b.status, b.reporter_type, b.step_name, b.created_at, i.iteration_name FROM sd_bugs b LEFT JOIN sd_iterations i ON b.iteration_id = i.id WHERE b.reporter_id = ${uid}$ OR b.assignee_id = ${uid}$ ORDER BY CASE b.status WHEN 'open' THEN 1 WHEN 'confirmed' THEN 2 WHEN 'in_progress' THEN 3 WHEN 'resolved' THEN 4 WHEN 'closed' THEN 5 ELSE 6 END, b.created_at DESC LIMIT 100 """ recs = await sor.sqlExe(sql, {"uid": user_id}) rows = [] status_labels = { "open": "待处理", "confirmed": "已确认", "in_progress": "处理中", "resolved": "已解决", "closed": "已关闭", } severity_labels = { "critical": "致命", "major": "严重", "minor": "一般", "trivial": "轻微", } for r in recs: rows.append({ "id": r.id, "title": r.title or "", "severity": severity_labels.get(r.severity, r.severity or ""), "priority": r.priority or "", "status": status_labels.get(r.status, r.status or ""), "status_raw": r.status or "", "reporter_type": "agent" if r.reporter_type == "agent" else "human", "step_name": r.step_name or "", "iteration_name": r.iteration_name or "", "created_at": str(r.created_at)[:16] if r.created_at else "", }) return json.dumps(rows, ensure_ascii=False) except Exception as e: return json.dumps([], ensure_ascii=False)