60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
# 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()) |