70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
from contextlib import asynccontextmanager
|
|
from fastapi import FastAPI
|
|
from starlette.middleware.cors import CORSMiddleware
|
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
|
|
from app.core.config import settings
|
|
from app.api.eta import router as eta_router
|
|
from app.api.auth import router as auth_router
|
|
from app.api.addresses import router as addresses_router
|
|
from app.api.colonias import router as colonias_router
|
|
from app.api.users import router as users_router
|
|
from app.api.admin import router as admin_router
|
|
from app.api.simulation import router as simulation_router
|
|
from app.api.chat import router as chat_router
|
|
from app.api.incidents import router as incidents_router
|
|
from app.services import simulation, notifications
|
|
|
|
scheduler = AsyncIOScheduler()
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
print("Iniciando aplicación: Backend Sistema de Recolección...")
|
|
|
|
simulation.load_data()
|
|
simulation.start_simulation_state()
|
|
|
|
notifications.init_firebase(settings.FIREBASE_CREDENTIALS_PATH)
|
|
|
|
scheduler.add_job(
|
|
simulation.tick,
|
|
"interval",
|
|
seconds=settings.SIMULATION_TICK_SECONDS,
|
|
id="simulation_tick",
|
|
)
|
|
scheduler.start()
|
|
print(f"Simulador iniciado. Tick cada {settings.SIMULATION_TICK_SECONDS}s.")
|
|
|
|
yield
|
|
|
|
print("Apagando aplicación y deteniendo simulador...")
|
|
scheduler.shutdown()
|
|
|
|
|
|
app = FastAPI(
|
|
title="API — Recolección Inteligente y Privada",
|
|
description="Backend para el sistema de recolección de residuos con privacidad por diseño.",
|
|
version="1.0.0",
|
|
lifespan=lifespan,
|
|
)
|
|
|
|
# CORS — necesario para el simulador web y el cliente Flutter
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=False, # Usamos Bearer tokens, no cookies — wildcard compatible
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
app.include_router(auth_router)
|
|
app.include_router(addresses_router)
|
|
app.include_router(eta_router)
|
|
app.include_router(colonias_router)
|
|
app.include_router(users_router)
|
|
app.include_router(admin_router)
|
|
app.include_router(simulation_router)
|
|
app.include_router(chat_router)
|
|
app.include_router(incidents_router)
|