proyecto completo - frontend + simulador + start.bat

This commit is contained in:
CarmenGlez20
2026-05-23 09:07:33 -06:00
commit cbf167593b
1629 changed files with 282522 additions and 0 deletions

60
simulador-backend/main.py Normal file
View File

@@ -0,0 +1,60 @@
# 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())