112 lines
3.1 KiB
Python
112 lines
3.1 KiB
Python
"""
|
|
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()
|