diff --git a/wwwroot/api/bug_accept.dspy b/wwwroot/api/bug_accept.dspy new file mode 100644 index 0000000..95e996a --- /dev/null +++ b/wwwroot/api/bug_accept.dspy @@ -0,0 +1,17 @@ +# bug_accept.dspy - Bug 验收(仅报告人):通过→closed,不通过→reopen + +user_id = await get_user() +if not user_id: + return json.dumps({"success": False, "error": "未登录"}, ensure_ascii=False) + +bug_id = params_kw.get('bug_id', '').strip() +accept = params_kw.get('accept', '').strip().lower() in ('1', 'true', 'yes', '通过') +comment = params_kw.get('comment', '') + +if not bug_id: + return json.dumps({"success": False, "error": "缺少 bug_id"}, ensure_ascii=False) + +ok, msg = await bug_accept(bug_id, accept, user_id, comment=comment) +if ok: + return json.dumps({"success": True, "message": msg}, ensure_ascii=False) +return json.dumps({"success": False, "error": msg}, ensure_ascii=False) diff --git a/wwwroot/api/human_task_complete.dspy b/wwwroot/api/human_task_complete.dspy new file mode 100644 index 0000000..722382a --- /dev/null +++ b/wwwroot/api/human_task_complete.dspy @@ -0,0 +1,21 @@ +# human_task_complete.dspy - 处理人类任务(同机构 + 匹配 assignee) + +user_id = await get_user() +if not user_id: + return json.dumps({"success": False, "error": "未登录"}, ensure_ascii=False) + +human_task_id = params_kw.get('human_task_id', '').strip() +result_data = params_kw.get('result_data', '') +if isinstance(result_data, str): + try: + result_data = json.loads(result_data) if result_data else {} + except Exception: + result_data = {"content": result_data} + +if not human_task_id: + return json.dumps({"success": False, "error": "缺少 human_task_id"}, ensure_ascii=False) + +ok, msg = await complete_human_task(human_task_id, result_data, operator_id=user_id) +if ok: + return json.dumps({"success": True, "id": msg}, ensure_ascii=False) +return json.dumps({"success": False, "error": msg}, ensure_ascii=False) diff --git a/wwwroot/api/human_task_create.dspy b/wwwroot/api/human_task_create.dspy new file mode 100644 index 0000000..db7a34d --- /dev/null +++ b/wwwroot/api/human_task_create.dspy @@ -0,0 +1,27 @@ +# human_task_create.dspy - 派发项目级人类任务(仅项目 owner) + +user_id = await get_user() +if not user_id: + return json.dumps({"success": False, "error": "未登录"}, ensure_ascii=False) + +project_id = params_kw.get('project_id', '').strip() +title = params_kw.get('title', '').strip() +description = params_kw.get('description', '') +assignee_role = params_kw.get('assignee_role', '').strip() +assignee_id = params_kw.get('assignee_id', '').strip() + +if not project_id or not title: + return json.dumps({"success": False, "error": "缺少 project_id 或 title"}, ensure_ascii=False) + +dbname = get_module_dbname('pipeline-sdlc') +async with DBPools().sqlorContext(dbname) as sor: + ok, emsg = await check_project_owner(project_id, user_id, sor) + if not ok: + return json.dumps({"success": False, "error": emsg}, ensure_ascii=False) + +ok, msg = await create_human_task(project_id, title, description, + assignee_role=assignee_role, assignee_id=assignee_id, + created_by=user_id) +if ok: + return json.dumps({"success": True, "id": msg}, ensure_ascii=False) +return json.dumps({"success": False, "error": msg}, ensure_ascii=False) diff --git a/wwwroot/api/my_todos.dspy b/wwwroot/api/my_todos.dspy new file mode 100644 index 0000000..a006321 --- /dev/null +++ b/wwwroot/api/my_todos.dspy @@ -0,0 +1,9 @@ +# my_todos.dspy - 我的待办(跨项目:人类任务 + bug 验收 + 冒泡问题) + +user_id = await get_user() +if not user_id: + return json.dumps({"success": False, "error": "未登录"}, ensure_ascii=False) + +todos = await list_my_human_todos(user_id) + +return json.dumps({"success": True, "todos": todos}, ensure_ascii=False, default=str) diff --git a/wwwroot/api/project_human_count.dspy b/wwwroot/api/project_human_count.dspy new file mode 100644 index 0000000..aff98ee --- /dev/null +++ b/wwwroot/api/project_human_count.dspy @@ -0,0 +1,10 @@ +# project_human_count.dspy - 项目角标 X = 指派给本人的待办数(问题+人类任务) + +user_id = await get_user() +if not user_id: + return json.dumps({"count": 0}, ensure_ascii=False) + +project_id = params_kw.get('project_id', '').strip() +count = await count_my_human_tasks(user_id, project_id) + +return json.dumps({"count": count}, ensure_ascii=False)