Spaces:
Runtime error
Runtime error
| """ | |
| Router de testes de database | |
| Endpoints para verificar conexão e estatísticas do banco | |
| """ | |
| from fastapi import APIRouter, HTTPException | |
| from api.models.responses import DatabaseStatsResponse, MessageResponse | |
| from api.utils.logger import setup_logger | |
| router = APIRouter() | |
| logger = setup_logger(__name__) | |
| async def database_health(): | |
| """ | |
| **Verifica saúde da conexão com banco de dados.** | |
| Retorna status da conexão e informações básicas. | |
| """ | |
| try: | |
| from database.db_manager import get_db_manager | |
| db = get_db_manager() | |
| is_healthy = db.health_check() | |
| if is_healthy: | |
| return { | |
| "status": "healthy", | |
| "message": "Database connection OK", | |
| "database_url": db.get_connection_info() | |
| } | |
| else: | |
| return { | |
| "status": "unhealthy", | |
| "message": "Database connection failed" | |
| } | |
| except Exception as e: | |
| logger.error(f"Database health check error: {e}") | |
| return { | |
| "status": "error", | |
| "message": str(e) | |
| } | |
| async def database_stats(): | |
| """ | |
| **Estatísticas do banco de dados.** | |
| Retorna contagem de registros nas principais tabelas. | |
| """ | |
| try: | |
| from database.db_manager import get_db_manager | |
| db = get_db_manager() | |
| stats = { | |
| "total_acordaos": db.count_records("acordaos"), | |
| "total_tribunais": db.count_records("tribunais"), | |
| "total_usuarios": db.count_records("usuarios"), | |
| "total_decisoes": db.count_records("decisoes"), | |
| } | |
| # Tentar pegar tamanho do banco | |
| try: | |
| size_mb = db.get_database_size_mb() | |
| stats["database_size_mb"] = size_mb | |
| except: | |
| stats["database_size_mb"] = None | |
| return DatabaseStatsResponse(**stats) | |
| except Exception as e: | |
| logger.error(f"Error getting database stats: {e}") | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def list_tables(): | |
| """ | |
| **Lista todas as tabelas do banco.** | |
| Útil para verificar se DDL foi executado corretamente. | |
| """ | |
| try: | |
| from database.db_manager import get_db_manager | |
| db = get_db_manager() | |
| tables = db.list_tables() | |
| return { | |
| "tables": tables, | |
| "total": len(tables) | |
| } | |
| except Exception as e: | |
| logger.error(f"Error listing tables: {e}") | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def test_insert(): | |
| """ | |
| **Testa inserção no banco de dados.** | |
| Insere um registro de teste e depois remove. | |
| Útil para verificar permissões de escrita. | |
| """ | |
| try: | |
| from database.db_manager import get_db_manager | |
| import uuid | |
| db = get_db_manager() | |
| # Tentar inserir um tribunal de teste | |
| test_id = str(uuid.uuid4()) | |
| success = db.execute_query( | |
| """ | |
| INSERT INTO tribunais (id, nome, sigla, uf, tipo, created_at, updated_at) | |
| VALUES (%s, %s, %s, %s, %s, NOW(), NOW()) | |
| """, | |
| (test_id, "Tribunal Teste", "TEST", "DF", "Teste") | |
| ) | |
| if success: | |
| # Remover registro de teste | |
| db.execute_query( | |
| "DELETE FROM tribunais WHERE id = %s", | |
| (test_id,) | |
| ) | |
| return MessageResponse( | |
| message="Test insert/delete successful", | |
| details={"test_id": test_id} | |
| ) | |
| else: | |
| raise Exception("Insert failed") | |
| except Exception as e: | |
| logger.error(f"Test insert error: {e}") | |
| raise HTTPException(status_code=500, detail=str(e)) | |