auto-sync: 2026-05-20 23:08:11
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user