- Oracle LOCAL (Docker): Para salvar TB_RANKING_CONSULTOR - Oracle REMOTO (CAPES): Para ler SUCUPIRA_PAINEL.VM_COORDENADOR - ConsultorRepositoryImpl usa oracle_remote para buscar PPG - RankingRepository usa oracle_local para salvar ranking - ProcessarRankingJob recebe ambos os clientes - Componente B agora está preparado para funcionar Nota: Elasticsearch precisa ser acessível da rede CAPES
84 lines
1.9 KiB
Python
84 lines
1.9 KiB
Python
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",
|
|
}
|