Files
hackathon-hello-world-f7a5a…/recolector_backend/app/seed.py
Erick Cesar Mondragon Palacios 7da903a0ab Agrega backend FastAPI al proyecto
2026-05-22 23:15:56 -06:00

116 lines
4.2 KiB
Python

from sqlalchemy.orm import Session
from app.models import Colonia, Route, RoutePosition, User
from app.security import hash_password
COLONIAS = [
{"colonia": "Zona Centro", "route_id": "RUTA-01", "horario_estimado": "Matutino (06:30 - 07:15)"},
{"colonia": "Las Arboledas", "route_id": "RUTA-01", "horario_estimado": "Matutino (07:00 - 07:30)"},
{"colonia": "Trojes", "route_id": "RUTA-13", "horario_estimado": "Matutino (06:40 - 07:10)"},
{"colonia": "San Juanico", "route_id": "RUTA-03", "horario_estimado": "Matutino (06:45 - 07:15)"},
{"colonia": "Los Olivos", "route_id": "RUTA-04", "horario_estimado": "Matutino (07:00 - 07:40)"},
{"colonia": "Rancho Seco", "route_id": "RUTA-05", "horario_estimado": "Vespertino (14:15 - 15:00)"},
{"colonia": "Las Insurgentes", "route_id": "RUTA-12", "horario_estimado": "Matutino (06:35 - 07:10)"},
]
ROUTE_DEFS = [
("RUTA-01", "Zona Centro - Las Arboledas", 101, "06:00"),
("RUTA-02", "Sector Norte - Av. Tecnológico", 102, "06:05"),
("RUTA-03", "Sector Poniente - San Juanico", 103, "06:10"),
("RUTA-04", "Oriente - Los Olivos", 104, "06:15"),
("RUTA-05", "Sector Sur - Rancho Seco", 105, "06:20"),
("RUTA-06", "Norte Extremo - Rumbos de Roque", 106, "06:00"),
("RUTA-07", "Nororiente - Ciudad Industrial", 107, "06:10"),
("RUTA-08", "Suroriente - Universidad Latina", 108, "06:15"),
("RUTA-09", "Poniente - Hospital General", 109, "06:02"),
("RUTA-10", "Eje Juan Pablo II - Sede UG Sur", 110, "06:22"),
("RUTA-11", "Zona de Oro - Torres Landa", 111, "06:04"),
("RUTA-12", "Nororiente - Las Insurgentes", 112, "06:08"),
("RUTA-13", "Sector Norte - Trojes e Irrigación", 113, "06:12"),
("RUTA-14", "Sur Poniente - La Toscana", 114, "06:16"),
("RUTA-15", "Norponiente - Camino a San José de Celaya", 115, "06:18"),
]
BASE_POSITIONS = [
(1, 20.5111, -100.9037, 0, 0),
(2, 20.5185, -100.8450, 42, 12),
(3, 20.5215, -100.8142, 25, 25),
(4, 20.5212, -100.8175, 15, 38),
(5, 20.5210, -100.8210, 0, 50),
(6, 20.5235, -100.8212, 18, 65),
(7, 20.5260, -100.8215, 24, 78),
(8, 20.5111, -100.9037, 40, 100),
]
def _timestamp(start_hour_min: str, delta_minutes: int) -> str:
hour, minute = map(int, start_hour_min.split(":"))
total = hour * 60 + minute + delta_minutes
hh = (total // 60) % 24
mm = total % 60
return f"2026-05-22T{hh:02d}:{mm:02d}:00Z"
def seed_database(db: Session):
if db.query(User).count() > 0:
return
citizen = User(
name="Usuario Demo",
email="demo@correo.com",
phone="4610000000",
password_hash=hash_password("123456"),
role="ciudadano",
)
operator = User(
name="Operador José Martínez",
email="operador@demo.com",
phone="4611111111",
password_hash=hash_password("123456"),
role="operador",
)
operator2 = User(
name="Operadora Ana Torres",
email="operador2@demo.com",
phone="4612222222",
password_hash=hash_password("123456"),
role="operador",
)
admin = User(
name="Administrador Logístico",
email="admin@demo.com",
phone="4613333333",
password_hash=hash_password("123456"),
role="admin",
)
db.add_all([citizen, operator, operator2, admin])
db.flush()
for idx, (route_id, name, truck_id, start) in enumerate(ROUTE_DEFS):
assigned = operator.id if route_id in {"RUTA-01", "RUTA-03", "RUTA-05"} else operator2.id if route_id in {"RUTA-04", "RUTA-12", "RUTA-13"} else None
route = Route(
route_id=route_id,
name=name,
truck_id=truck_id,
status="PENDIENTE",
assigned_operator_id=assigned,
current_position_id=1,
)
db.add(route)
db.flush()
offset = idx * 0.0025
for position_id, lat, lng, speed, delta in BASE_POSITIONS:
db.add(RoutePosition(
route_id=route_id,
position_id=position_id,
lat=lat + offset,
lng=lng - offset,
speed=speed,
timestamp=_timestamp(start, delta),
))
for c in COLONIAS:
db.add(Colonia(**c))
db.commit()