Spaces:
Runtime error
Runtime error
| """ | |
| Router de testes de gestão de arquivos | |
| Endpoints para testar criação, listagem e download de arquivos | |
| """ | |
| from fastapi import APIRouter, HTTPException | |
| from typing import List | |
| from pathlib import Path | |
| from api.models.requests import FileCreateRequest | |
| from api.models.responses import FileInfoResponse, MessageResponse | |
| from api.utils.logger import setup_logger | |
| router = APIRouter() | |
| logger = setup_logger(__name__) | |
| async def create_test_file(request: FileCreateRequest): | |
| """ | |
| **Cria arquivo de teste.** | |
| Útil para testar sistema de arquivos e permissões. | |
| """ | |
| try: | |
| from files.files_manager import FilesManager | |
| fm = FilesManager() | |
| # Criar arquivo | |
| filepath = fm.save_text_file( | |
| content=request.content, | |
| filename=request.filename, | |
| acordao_id=request.acordao_id | |
| ) | |
| logger.info(f"✅ Test file created: {filepath}") | |
| return MessageResponse( | |
| message="File created successfully", | |
| details={ | |
| "filepath": str(filepath), | |
| "filename": request.filename, | |
| "size": len(request.content) | |
| } | |
| ) | |
| except Exception as e: | |
| logger.error(f"Error creating file: {e}") | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def list_files(acordao_id: str = None, limit: int = 100): | |
| """ | |
| **Lista arquivos.** | |
| Args: | |
| acordao_id: Filtrar por ID de acórdão (opcional) | |
| limit: Limite de resultados | |
| """ | |
| try: | |
| from files.files_manager import FilesManager | |
| fm = FilesManager() | |
| files = fm.list_files( | |
| acordao_id=acordao_id, | |
| limit=limit | |
| ) | |
| return [ | |
| FileInfoResponse( | |
| filename=f["filename"], | |
| size_bytes=f["size_bytes"], | |
| hash_sha256=f.get("hash", "unknown"), | |
| created_at=f.get("created_at") | |
| ) | |
| for f in files | |
| ] | |
| except Exception as e: | |
| logger.error(f"Error listing files: {e}") | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def get_file_info(filename: str): | |
| """ | |
| **Informações sobre um arquivo específico.** | |
| """ | |
| try: | |
| from files.files_manager import FilesManager | |
| fm = FilesManager() | |
| info = fm.get_file_info(filename) | |
| if not info: | |
| raise HTTPException(status_code=404, detail="File not found") | |
| return info | |
| except HTTPException: | |
| raise | |
| except Exception as e: | |
| logger.error(f"Error getting file info: {e}") | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def delete_file(filename: str): | |
| """ | |
| **Deleta arquivo.** | |
| Args: | |
| filename: Nome do arquivo a deletar | |
| """ | |
| try: | |
| from files.files_manager import FilesManager | |
| fm = FilesManager() | |
| success = fm.delete_file(filename) | |
| if success: | |
| logger.info(f"🗑️ File deleted: {filename}") | |
| return MessageResponse( | |
| message="File deleted successfully", | |
| details={"filename": filename} | |
| ) | |
| else: | |
| raise HTTPException(status_code=404, detail="File not found") | |
| except HTTPException: | |
| raise | |
| except Exception as e: | |
| logger.error(f"Error deleting file: {e}") | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def storage_info(): | |
| """ | |
| **Informações sobre armazenamento.** | |
| Retorna uso de disco e estatísticas. | |
| """ | |
| try: | |
| from files.files_manager import FilesManager | |
| import shutil | |
| fm = FilesManager() | |
| # Pegar info de disco | |
| total, used, free = shutil.disk_usage(fm.base_path) | |
| return { | |
| "base_path": str(fm.base_path), | |
| "storage": { | |
| "total_gb": total / (1024**3), | |
| "used_gb": used / (1024**3), | |
| "free_gb": free / (1024**3), | |
| "percent_used": (used / total) * 100 | |
| }, | |
| "total_files": len(list(Path(fm.base_path).rglob("*.*"))) | |
| } | |
| except Exception as e: | |
| logger.error(f"Error getting storage info: {e}") | |
| raise HTTPException(status_code=500, detail=str(e)) | |