from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager from .routes import router from .config import settings from .dependencies import es_client, oracle_local_client, oracle_remote_client, get_processar_job from ...application.jobs.scheduler import RankingScheduler @asynccontextmanager async def lifespan(app: FastAPI): await es_client.connect() # Conectar Oracle LOCAL (Docker) try: oracle_local_client.connect() print("Oracle LOCAL conectado (Docker)") except Exception as e: print(f"AVISO: Oracle LOCAL não conectou: {e}") # Conectar Oracle REMOTO (CAPES) try: oracle_remote_client.connect() print("Oracle REMOTO conectado (CAPES/SUCUPIRA_PAINEL)") except Exception as e: print(f"AVISO: Oracle REMOTO não conectou: {e}. Sistema rodando sem Componente B (PPG).") scheduler = None try: job = get_processar_job() scheduler = RankingScheduler(job) await scheduler.iniciar() except Exception as e: print(f"AVISO: Scheduler não iniciou: {e}") yield if scheduler: try: scheduler.parar() except: pass await es_client.close() try: oracle_local_client.close() except: pass try: oracle_remote_client.close() except: pass app = FastAPI( title="Ranking de Consultores CAPES", description="Sistema de Ranking de Consultores CAPES baseado na Minuta Técnica", version="1.0.0", lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=settings.cors_origins_list, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(router) @app.get("/") async def root(): return { "message": "API Ranking CAPES", "version": "1.0.0", "docs": "/docs", "health": "/api/v1/health", }