# main.py from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware import json, asyncio, os from datetime import datetime app = FastAPI(title="EcoTrack Simulador") app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) # Carga el JSON de rutas with open("rutas.json", "r", encoding="utf-8") as f: RUTAS = json.load(f) # Estado actual del simulador en memoria estado = {} for ruta in RUTAS: estado[ruta["routeId"]] = { "routeId": ruta["routeId"], "name": ruta["name"], "truckId": ruta["truckId"], "status": ruta["status"], "posicionActual": 1, "totalNodos": len(ruta["positions"]) } @app.get("/rutas") def get_rutas(): return list(estado.values()) @app.get("/rutas/{route_id}") def get_ruta(route_id: str): return estado.get(route_id, {"error": "Ruta no encontrada"}) @app.get("/") def root(): return {"mensaje": "Simulador EcoTrack corriendo", "hora": datetime.now().isoformat()} # Simulador — avanza posicionActual cada 90 segundos async def simular(): while True: await asyncio.sleep(10) for route_id in estado: pos = estado[route_id]["posicionActual"] total = estado[route_id]["totalNodos"] if pos < total: estado[route_id]["posicionActual"] += 1 else: # Reinicia la ruta al terminar estado[route_id]["posicionActual"] = 1 print(f"[{datetime.now().strftime('%H:%M:%S')}] Camiones avanzaron un nodo") @app.on_event("startup") async def startup(): asyncio.create_task(simular())