auto-sync: 2026-05-20 23:08:11

This commit is contained in:
cfdaily
2026-05-20 23:08:11 +08:00
parent c0b9098771
commit 94d48d122a
+26 -9
View File
@@ -84,7 +84,7 @@ async def update_project(project_id: str, body: Dict[str, Any]):
@router.post("/{project_id}/tasks/{task_id}/move")
async def move_task(project_id: str, task_id: str, body: Dict[str, Any]):
"""移动任务到另一个项目"""
"""移动任务到另一个项目(含子任务一起移动)"""
target_project = body.get("target_project_id")
if not target_project:
raise HTTPException(422, "Missing target_project_id")
@@ -96,17 +96,35 @@ async def move_task(project_id: str, task_id: str, body: Dict[str, Any]):
raise HTTPException(404, f"Target project not found: {target_project}")
# 从源项目读任务
from src.blackboard.db import Blackboard
from src.blackboard.models import Task
from src.blackboard.operations import Blackboard
from src.blackboard.models import Task as TaskModel
src_bb = Blackboard(Path(reg.root) / project_id / "blackboard.db")
task = src_bb.get_task(task_id)
if not task:
raise HTTPException(404, f"Task not found: {task_id}")
# 写入目标项目
# 查找子任务
children = src_bb.list_tasks(parent_task=task_id)
tgt_bb = Blackboard(Path(reg.root) / target_project / "blackboard.db")
# 重置状态和时间为初始值
moved_task = Task(
moved_ids = []
# 先移动子任务
for child in children:
moved_child = TaskModel(
id=child.id, title=child.title, description=child.description,
status="pending", assignee=child.assignee, assigned_by=child.assigned_by,
priority=child.priority, task_type=child.task_type,
risk_level=child.risk_level, parent_task=child.parent_task,
stage=child.stage, stages_json=child.stages_json,
depends_on=child.depends_on, must_haves=child.must_haves,
)
tgt_bb.create_task(moved_child)
src_bb.update_task_status(child.id, "cancelled", detail=f"Moved to {target_project}")
moved_ids.append(child.id)
# 移动主任务
moved_task = TaskModel(
id=task.id, title=task.title, description=task.description,
status="pending", assignee=task.assignee, assigned_by=task.assigned_by,
priority=task.priority, task_type=task.task_type,
@@ -115,8 +133,7 @@ async def move_task(project_id: str, task_id: str, body: Dict[str, Any]):
depends_on=task.depends_on, must_haves=task.must_haves,
)
tgt_bb.create_task(moved_task)
# 从源项目标记 cancelled
src_bb.update_task_status(task_id, "cancelled", detail=f"Moved to {target_project}")
moved_ids.insert(0, task_id)
return {"ok": True, "moved_to": target_project}
return {"ok": True, "moved_to": target_project, "moved_ids": moved_ids}