""" =============================================================================== 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, Request from pydantic import BaseModel from typing import Optional, Dict, Any from routers.auth import get_current_user from llm.db_tools import db_get_tasks, db_add_task, db_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: """Извлекает корректный ID пользователя из JWT payload или ставит дефолтный 1.""" 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": db_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 = db_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 = db_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