chore: save working baseline before v3.0 architecture refactoring
This commit is contained in:
@@ -1,71 +1,75 @@
|
||||
"""
|
||||
===============================================================================
|
||||
FILE: modules/web_api/routers/tasks.py
|
||||
ROLE: REST API управления задачами (GET / POST / PATCH / DELETE).
|
||||
PROJECT: SCUD Orion AI (Unified Architecture)
|
||||
MODULE: web_api / routers
|
||||
ROLE: REST API эндпоинты реестра задач (получение, создание и обновление).
|
||||
===============================================================================
|
||||
"""
|
||||
|
||||
# ANCHOR[TASKS_ROUTER_IMPORTS]
|
||||
from typing import Dict, Any, Optional
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional, Dict, Any
|
||||
|
||||
from .auth import get_current_user
|
||||
from llm.db_tools import (
|
||||
db_get_tasks,
|
||||
db_add_task,
|
||||
db_update_task_status,
|
||||
db_delete_task
|
||||
)
|
||||
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"])
|
||||
router = APIRouter(prefix="/api/v1/tasks", tags=["Tasks"])
|
||||
|
||||
# ANCHOR[TASKS_SCHEMAS]
|
||||
class CreateTaskRequest(BaseModel):
|
||||
class TaskCreateRequest(BaseModel):
|
||||
title: str
|
||||
priority: Optional[str] = "MEDIUM"
|
||||
module: Optional[str] = "general"
|
||||
due_date: Optional[str] = None
|
||||
status: Optional[str] = "BACKLOG"
|
||||
|
||||
class UpdateTaskRequest(BaseModel):
|
||||
status: Optional[str] = "COMPLETED"
|
||||
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
|
||||
|
||||
|
||||
# ANCHOR[TASKS_ENDPOINTS]
|
||||
@router.get("")
|
||||
def get_tasks(user: Dict[str, Any] = Depends(get_current_user)):
|
||||
"""Получить список всех задач текущего авторизованного пользователя."""
|
||||
return db_get_tasks(user_id=user["id"])
|
||||
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("")
|
||||
def create_task_endpoint(req: CreateTaskRequest, user: Dict[str, Any] = Depends(get_current_user)):
|
||||
"""Прямое создание задачи."""
|
||||
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 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
|
||||
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=404, detail=res["error"])
|
||||
raise HTTPException(status_code=400, 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)
|
||||
|
||||
@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
|
||||
Reference in New Issue
Block a user