Numidium / app /main.py
Madras1's picture
Upload 42 files
6575bb4 verified
"""
Numidium Backend - Main Application
Plataforma de Inteligência e Análise de Dados
"""
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
from app.config import settings
from app.core.database import init_db
from app.api.routes import entities, relationships, events, search, ingest
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Startup and shutdown events"""
# Startup: Initialize database
init_db()
print("🚀 Numidium Backend started!")
print(f"📊 Database: {settings.database_url}")
yield
# Shutdown
print("👋 Numidium Backend shutting down...")
# Create FastAPI app
app = FastAPI(
title="Numidium API",
description="""
## 🔮 Sistema de Inteligência e Análise de Dados
Backend do VANTAGE - Uma plataforma para:
- 📥 Ingestão de dados de múltiplas fontes (Wikipedia, News, Manual)
- 🔗 Mapeamento de conexões entre entidades
- 🗺️ Visualização geográfica
- 📊 Análise de grafos e relacionamentos
- 🔍 Busca global
""",
version=settings.app_version,
lifespan=lifespan
)
# CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include routers
app.include_router(entities.router, prefix="/api/v1")
app.include_router(relationships.router, prefix="/api/v1")
app.include_router(events.router, prefix="/api/v1")
app.include_router(search.router, prefix="/api/v1")
app.include_router(ingest.router, prefix="/api/v1")
@app.get("/")
def root():
"""Root endpoint - API info"""
return {
"name": "Numidium",
"version": settings.app_version,
"status": "online",
"docs": "/docs",
"description": "Sistema de Inteligência e Análise de Dados"
}
@app.get("/health")
def health_check():
"""Health check endpoint for HF Spaces"""
return {"status": "healthy"}
@app.get("/api/v1")
def api_info():
"""API v1 info"""
return {
"version": "1.0.0",
"endpoints": {
"entities": "/api/v1/entities",
"relationships": "/api/v1/relationships",
"events": "/api/v1/events",
"search": "/api/v1/search",
"ingest": "/api/v1/ingest"
}
}