""" 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}