""" =============================================================================== FILE: modules/web_api/routers/tasks.py ROLE: REST API управления задачами (GET / POST / PATCH / DELETE). =============================================================================== """ # ANCHOR[TASKS_ROUTER_IMPORTS] from typing import Dict, Any, Optional from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from .auth import get_current_user from llm.db_tools import ( db_get_tasks, db_add_task, db_update_task_status, db_delete_task ) router = APIRouter(prefix="/api/v1/tasks", tags=["tasks"]) # ANCHOR[TASKS_SCHEMAS] class CreateTaskRequest(BaseModel): title: str priority: Optional[str] = "MEDIUM" module: Optional[str] = "general" due_date: Optional[str] = None class UpdateTaskRequest(BaseModel): status: Optional[str] = "COMPLETED" due_date: Optional[str] = None # ANCHOR[TASKS_ENDPOINTS] @router.get("") def get_tasks(user: Dict[str, Any] = Depends(get_current_user)): """Получить список всех задач текущего авторизованного пользователя.""" return db_get_tasks(user_id=user["id"]) @router.post("") def create_task_endpoint(req: CreateTaskRequest, user: Dict[str, Any] = Depends(get_current_user)): """Прямое создание задачи.""" res = db_add_task( user_id=user["id"], module=req.module or "general", title=req.title.strip(), priority=req.priority or "MEDIUM", due_date=req.due_date ) return res @router.patch("/{task_id}") def update_task_endpoint(task_id: str, req: UpdateTaskRequest, user: Dict[str, Any] = Depends(get_current_user)): """Прямое обновление статуса и срока задачи.""" res = db_update_task_status( user_id=user["id"], task_id=task_id, status=req.status or "COMPLETED", due_date=req.due_date ) if "error" in res: raise HTTPException(status_code=404, detail=res["error"]) return res @router.delete("/{task_id}") def delete_task_endpoint(task_id: str, user: Dict[str, Any] = Depends(get_current_user)): """Прямое удаление задачи.""" res = db_delete_task(user_id=user["id"], task_id=task_id) if "error" in res: raise HTTPException(status_code=404, detail=res["error"]) return res