File size: 2,488 Bytes
e7f9d7f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6575bb4
e7f9d7f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
"""

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"
        }
    }