"""Contrôleur pour lister les fichiers et dossiers Nextcloud""" from fastapi import APIRouter, HTTPException, Path from fastapi.responses import JSONResponse from nc_py_api import NextcloudException from utils import get_nextcloud_client, format_file_info router = APIRouter() @router.get("/list/{path:path}") async def list_directory( path: str = Path( ..., description="Chemin du répertoire à lister (utilisez '/' pour la racine)", examples=["Documents"] ) ): """ Liste tous les fichiers et dossiers d'un répertoire Nextcloud Args: path: Chemin du répertoire (sans le slash initial) Returns: JSON contenant la liste des fichiers et dossiers """ try: # Créer le client Nextcloud nc = get_nextcloud_client() # Normaliser le chemin if path == "/" or path == "": directory_path = "/" else: # Enlever les slashes de début/fin directory_path = "/" + path.strip("/") # Lister le contenu du répertoire try: files_list = nc.files.listdir(path=directory_path) except NextcloudException as e: if "404" in str(e): raise HTTPException( status_code=404, detail=f"Le répertoire '{directory_path}' n'existe pas" ) else: raise HTTPException( status_code=500, detail=f"Erreur Nextcloud: {str(e)}" ) # Formater les résultats - retourner uniquement la liste des items items = [format_file_info(item) for item in files_list] return JSONResponse(content=items) except HTTPException: raise except Exception as e: raise HTTPException( status_code=500, detail=f"Erreur interne: {str(e)}" )