"""天工阁 API:受托任务(分解/派发/验收)。""" from fastapi import APIRouter, Depends, Request from pydantic import BaseModel, Field from app.api.v1.deps import get_current_user from app.domains.tiangong import service from app.schemas.auth import CurrentUser task_router = APIRouter(prefix="/tasks", tags=["tiangong"]) class TaskCreateRequest(BaseModel): character_id: str | None = None title: str = Field(min_length=1, max_length=200) brief: str = "" acceptance_criteria: str = "" parent_task_id: str | None = None class DecomposeRequest(BaseModel): subtasks: list[dict] class AcceptRequest(BaseModel): accepted: bool @task_router.post("", status_code=201) async def create_task_api( payload: TaskCreateRequest, user: CurrentUser = Depends(get_current_user) ) -> dict: return await service.create_task( owner_scope=user.owner_scope, character_id=payload.character_id, title=payload.title, brief=payload.brief, acceptance_criteria=payload.acceptance_criteria, parent_task_id=payload.parent_task_id, ) @task_router.get("") async def list_tasks_api( user: CurrentUser = Depends(get_current_user), parent: str | None = "root" ) -> list[dict]: return await service.list_tasks(user.owner_scope, parent=None if parent == "all" else parent) @task_router.post("/{task_id}/decompose", status_code=201) async def decompose_api( task_id: str, payload: DecomposeRequest, user: CurrentUser = Depends(get_current_user) ) -> list[dict]: return await service.decompose(task_id, user.owner_scope, payload.subtasks) @task_router.post("/{task_id}/dispatch") async def dispatch_api( task_id: str, request: Request, user: CurrentUser = Depends(get_current_user) ) -> dict: return await service.dispatch(task_id, user.owner_scope, request.app.state) @task_router.post("/{task_id}/accept") async def accept_api( task_id: str, payload: AcceptRequest, user: CurrentUser = Depends(get_current_user) ) -> dict: return await service.accept(task_id, user.owner_scope, accepted=payload.accepted)