116 lines
4.2 KiB
Python
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()
|