""" Restaura la base de datos desde database_dump.sql. Uso (en cualquier máquina): cd backend python restore_db.py Esto: 1. Borra mi_ruta_limpia.db si existe 2. Lee database_dump.sql 3. Crea una BD SQLite nueva idéntica a la original 4. Verifica conteos de registros Resultado: - 202 usuarios (185 ciudadanos, 14 empleados, 3 admins) - 302 domicilios con rutas asignadas - 280 reportes ciudadanos - 150 reportes operativos - 220 calificaciones de servicio - 62 camiones de la flotilla Credenciales demo: - demo@celaya.gob.mx / Celaya2026 (CIUDADANO) - empleado@celaya.gob.mx / Empleado2026 (EMPLEADO) - admin@celaya.gob.mx / Admin2026 (ADMIN) """ import os import sqlite3 import sys DB_FILE = "mi_ruta_limpia.db" DUMP_FILE = "database_dump.sql" def main(): # Verificar que existe el dump if not os.path.exists(DUMP_FILE): print(f"✗ ERROR: no se encontró '{DUMP_FILE}' en este directorio.") print(f" Asegúrate de estar parado en backend/ y que el archivo esté ahí.") sys.exit(1) # Borrar BD existente si la hay if os.path.exists(DB_FILE): print(f"⚠ La base de datos '{DB_FILE}' ya existe. Borrándola para restaurar limpio...") os.remove(DB_FILE) # Crear nueva BD ejecutando el dump print(f"📥 Restaurando desde '{DUMP_FILE}'...") conn = sqlite3.connect(DB_FILE) with open(DUMP_FILE, "r", encoding="utf-8") as f: sql = f.read() conn.executescript(sql) conn.commit() # Verificar conteos cursor = conn.cursor() expected = { "users": 202, "addresses": 302, "reports": 280, "operational_reports": 150, "service_ratings": 220, "trucks": 62, } print("\n📊 Verificación de tablas:") all_ok = True for table, exp_count in expected.items(): try: cursor.execute(f"SELECT COUNT(*) FROM {table}") n = cursor.fetchone()[0] ok = "✓" if n == exp_count else "⚠" print(f" {ok} {table:25} {n:>4}/{exp_count}") if n != exp_count: all_ok = False except sqlite3.OperationalError as e: print(f" ✗ {table:25} ERROR: {e}") all_ok = False conn.close() # Resumen print() print("═" * 60) if all_ok: print(" ✅ BASE DE DATOS RESTAURADA EXITOSAMENTE") else: print(" ⚠ RESTAURACIÓN COMPLETADA CON DIFERENCIAS") print("═" * 60) print() print(" Credenciales demo para probar la app:") print() print(" 🧑 CIUDADANO") print(" Email: demo@celaya.gob.mx") print(" Contraseña: Celaya2026") print() print(" 👮 EMPLEADO") print(" Email: empleado@celaya.gob.mx") print(" Contraseña: Empleado2026") print() print(" 🛡️ ADMINISTRADOR") print(" Email: admin@celaya.gob.mx") print(" Contraseña: Admin2026") print() print(" Ya puedes arrancar el backend con:") print(" uvicorn main:app --reload --host 0.0.0.0 --port 8000") print() if __name__ == "__main__": main()