112 lines
3.9 KiB
Python
112 lines
3.9 KiB
Python
"""
|
|
Routes API pour l'historique des commandes ad-hoc.
|
|
"""
|
|
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Request
|
|
|
|
from app.core.dependencies import verify_api_key
|
|
from app.services import adhoc_history_service
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/history")
|
|
async def get_adhoc_history(
|
|
category: Optional[str] = None,
|
|
search: Optional[str] = None,
|
|
limit: int = 50,
|
|
api_key_valid: bool = Depends(verify_api_key)
|
|
):
|
|
"""Récupère l'historique des commandes ad-hoc."""
|
|
commands = await adhoc_history_service.get_commands(
|
|
category=category,
|
|
search=search,
|
|
limit=limit,
|
|
)
|
|
return {
|
|
"commands": [cmd.dict() for cmd in commands],
|
|
"count": len(commands)
|
|
}
|
|
|
|
|
|
@router.get("/categories")
|
|
async def get_adhoc_categories(api_key_valid: bool = Depends(verify_api_key)):
|
|
"""Récupère la liste des catégories de commandes ad-hoc."""
|
|
categories = await adhoc_history_service.get_categories()
|
|
return {"categories": [cat.dict() for cat in categories]}
|
|
|
|
|
|
@router.post("/categories")
|
|
async def create_adhoc_category(
|
|
name: str,
|
|
description: Optional[str] = None,
|
|
color: str = "#7c3aed",
|
|
icon: str = "fa-folder",
|
|
api_key_valid: bool = Depends(verify_api_key)
|
|
):
|
|
"""Crée une nouvelle catégorie de commandes ad-hoc."""
|
|
category = await adhoc_history_service.add_category(name, description, color, icon)
|
|
return {"category": category.dict(), "message": "Catégorie créée"}
|
|
|
|
|
|
@router.put("/categories/{category_name}")
|
|
async def update_adhoc_category(
|
|
category_name: str,
|
|
request: Request,
|
|
api_key_valid: bool = Depends(verify_api_key)
|
|
):
|
|
"""Met à jour une catégorie existante."""
|
|
try:
|
|
data = await request.json()
|
|
new_name = data.get("name", category_name)
|
|
description = data.get("description", "")
|
|
color = data.get("color", "#7c3aed")
|
|
icon = data.get("icon", "fa-folder")
|
|
|
|
success = await adhoc_history_service.update_category(category_name, new_name, description, color, icon)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Catégorie non trouvée")
|
|
return {"message": "Catégorie mise à jour", "category": new_name}
|
|
except Exception as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
|
|
|
|
@router.delete("/categories/{category_name}")
|
|
async def delete_adhoc_category(
|
|
category_name: str,
|
|
api_key_valid: bool = Depends(verify_api_key)
|
|
):
|
|
"""Supprime une catégorie et déplace ses commandes vers 'default'."""
|
|
if category_name == "default":
|
|
raise HTTPException(status_code=400, detail="La catégorie 'default' ne peut pas être supprimée")
|
|
|
|
success = await adhoc_history_service.delete_category(category_name)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Catégorie non trouvée")
|
|
return {"message": "Catégorie supprimée", "category": category_name}
|
|
|
|
|
|
@router.put("/history/{command_id}/category")
|
|
async def update_adhoc_command_category(
|
|
command_id: str,
|
|
category: str,
|
|
description: Optional[str] = None,
|
|
api_key_valid: bool = Depends(verify_api_key)
|
|
):
|
|
"""Met à jour la catégorie d'une commande dans l'historique."""
|
|
success = await adhoc_history_service.update_command_category(command_id, category, description)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Commande non trouvée")
|
|
return {"message": "Catégorie mise à jour", "command_id": command_id, "category": category}
|
|
|
|
|
|
@router.delete("/history/{command_id}")
|
|
async def delete_adhoc_command(command_id: str, api_key_valid: bool = Depends(verify_api_key)):
|
|
"""Supprime une commande de l'historique."""
|
|
success = await adhoc_history_service.delete_command(command_id)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Commande non trouvée")
|
|
return {"message": "Commande supprimée", "command_id": command_id}
|