""" 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__) @router.get("/health") 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) } @router.get("/stats", response_model=DatabaseStatsResponse) 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)) @router.get("/tables") 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)) @router.post("/test-insert") 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))