""" =============================================================================== FILE: modules/web_api/routers/tasks.py PROJECT: SCUD Orion AI (Unified Architecture) MODULE: web_api / routers ROLE: REST API эндпоинты реестра задач. =============================================================================== """ from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from typing import Optional, Dict, Any from routers.auth import get_current_user from services.tasks.service import get_tasks, add_task, update_task_details router = APIRouter(prefix="/api/v1/tasks", tags=["Tasks"]) class TaskCreateRequest(BaseModel): title: str priority: Optional[str] = "MEDIUM" module: Optional[str] = "general" due_date: Optional[str] = None status: Optional[str] = "BACKLOG" class TaskUpdateRequest(BaseModel): title: Optional[str] = None priority: Optional[str] = None due_date: Optional[str] = None status: Optional[str] = None def resolve_user_id(current_user: Dict[str, Any]) -> int: if not current_user: return 1 return current_user.get("id") or current_user.get("user_id") or 1 @router.get("") async def get_tasks_endpoint(status: Optional[str] = None, current_user = Depends(get_current_user)): user_id = resolve_user_id(current_user) return {"tasks": get_tasks(user_id=user_id, status=status)} @router.post("") async def create_task_endpoint(req: TaskCreateRequest, current_user = Depends(get_current_user)): user_id = resolve_user_id(current_user) res = add_task( user_id=user_id, module=req.module, title=req.title, priority=req.priority, due_date=req.due_date, status=req.status ) if "error" in res: raise HTTPException(status_code=400, detail=res["error"]) return res @router.patch("/{task_id}") async def update_task_endpoint(task_id: str, req: TaskUpdateRequest, current_user = Depends(get_current_user)): user_id = resolve_user_id(current_user) res = update_task_details( user_id=user_id, task_id=task_id, title=req.title, priority=req.priority, status=req.status, due_date=req.due_date ) if "error" in res: raise HTTPException(status_code=404, detail=res["error"]) return res