Sistema integral de supervisión y seguridad minera con cascos inteligentes IoT y dashboards en tiempo real.
Stack tecnológico:
- 🐍 Backend: FastAPI + Python + MySQL
- 🌐 Web: Angular + TypeScript
- 📱 Mobile: React Native + Expo + TypeScript
MineGuard/
├── backend/ # 🐍 API FastAPI + Python + MySQL
├── web/ # 🌐 Frontend Angular + TypeScript
├── mobile/ # 📱 App React Native + Expo (iOS/Android)
└── README.md # 📚 Documentación principal
- Python 3.11+
- MySQL (Azure Flexible Server)
pipinstalado
- Clonar el repositorio:
git clone https://github.com/MineGuardOrg/MineGuard.git
cd MineGuard/backend- Crear y activar el entorno virtual:
Windows
python -m venv venv
venv\Scripts\activateLinux
python3 -m venv venv
source venv/bin/activate- Instalar dependencias:
pip install -r requirements.txt- Configurar las variables de entorno en
.env:
- Ejecutar la API:
uvicorn app.main:app --reload- Acceder a la documentación Swagger:
main está protegida. NO hagas push directo a main. Usa ramas y Pull Requests.
-
Crear una nueva rama desde
develop:git checkout develop git pull origin develop git checkout -b user/cambio-realizado
-
Hacer commits:
git add . git commit -m "Descripción clara del cambio" git pull origin develop
-
Subir la rama al repositorio remoto:
- Sube tu rama al repositorio remoto:
git push origin user/app-o-crud-realizado (nombre de tu rama creada)
- Sube tu rama al repositorio remoto:
-
Crear un Pull Request hacia
develop:- Ve a GitHub.
- Crea un Pull Request
- Base: develop | compare: Tu rama de trabajo (por ejemplo, user/app-o-crud-realizado)
- Escribe un título y descripción claros para el Pull Request.
- Solicita la revisión del owner y espera su aprobación.
- Entrar al proyecto Web
cd MineGuard/web- Instalar dependencias
npm install- Una vez terminado de descargar las dependencias del proyecto, ejecutar:
ng serve - Acceder al proyecto de Web:
Aplicación móvil multiplataforma para supervisión de mineros con soporte iOS y Android.
- Framework: React Native + Expo
- Lenguaje: TypeScript
- Networking: Axios + Socket.IO
- Arquitectura: Modular (Auth + Dashboard)
- Navegación: React Navigation
- Storage: AsyncStorage
- Testing: Compatible con iPad desde Windows sin Mac
mobile/src/
├── core/ # ⚙️ Configuración base
│ ├── config.ts # URLs backend (API + WebSocket)
│ ├── api.ts # Cliente HTTP con auth
│ └── storage.ts # AsyncStorage wrapper
├── modules/ # 📦 Módulos de la app
│ ├── auth/ # 🔐 Autenticación
│ │ ├── screens/ # LoginScreen
│ │ ├── services/ # AuthService
│ │ └── types/ # Tipos TypeScript
│ └── dashboard/ # 📊 Dashboard tiempo real
│ ├── screens/ # DashboardScreen
│ ├── components/ # StatCard, WorkerCard, AlertCard
│ ├── services/ # DashboardService + WebSockets
│ └── types/ # Tipos TypeScript
├── navigation/ # 🧭 Navegación
│ └── AppNavigator.tsx
└── types/ # Tipos globales
- Node.js 18 o superior
- npm o yarn
- Expo Go app (en tu dispositivo iOS/Android)
- Para compilar nativamente: EAS CLI
- Clonar el repositorio:
git clone https://github.com/MineGuardOrg/MineGuard.git
cd MineGuard/mobile- Instalar dependencias:
npm install- Configurar URL del backend:
Edita src/core/config.ts:
export const API_BASE_URL = 'http://TU_IP:8000'; // ⬅️ CAMBIAR
export const WS_BASE_URL = 'ws://TU_IP:8000';Ejemplos según tu caso:
- Dispositivo físico (misma WiFi):
http://192.168.1.XX:8000 - Android Emulator:
http://10.0.2.2:8000 - Backend en la nube:
https://tu-dominio.com
💡 Cómo encontrar tu IP local:
# Windows
ipconfig
# Mac/Linux
ifconfig | grep inet- Iniciar servidor de desarrollo:
npm startSe mostrará un QR code en la terminal.
- Probar en tu dispositivo:
- iOS: Descarga Expo Go desde App Store, escanea el QR con la cámara
- Android: Descarga Expo Go desde Play Store, escanea el QR desde la app
Android:
npm run androidiOS (solo Mac):
npm run iosWeb:
npm run webUsando EAS Build (gratis):
- Instalar EAS CLI:
npm install -g eas-cli- Login en Expo:
eas login- Configurar proyecto:
eas build:configure- Compilar Android:
eas build --platform android --profile preview- Compilar iOS (sin Mac):
eas build --platform ios --profile previewLas URLs del backend se configuran en src/core/config.ts.
# Tests unitarios (cuando estén implementados)
npm test
# Limpiar caché
npm start --reset-cache✅ Login con backend FastAPI
✅ Dashboard en tiempo real con WebSockets
✅ Monitoreo de trabajadores activos
✅ Alertas en tiempo real
✅ Biométricas por área
✅ Pull-to-refresh
✅ Optimizado para iPad y móviles
✅ Navegación automática (Login → Dashboard)
✅ Almacenamiento seguro de tokens
Para conectar el backend con Azure Database for MySQL usando SSL:
-
Descarga el certificado raíz
BaltimoreCyberTrustRoot.crt.pemdesde: https://www.digicert.com/kb/digicert-root-certificates.htm (Busca "Baltimore CyberTrust Root" y descarga el archivo en formato PEM) -
Crea la carpeta
certs/dentro debackend/y coloca ahí el archivo descargado. -
Agrega la ruta relativa al archivo en tu
.env:DB_SSL_CERT=certs/BaltimoreCyberTrustRoot.crt.pem -
No subas la carpeta
certs/ni el certificado al repositorio. Cada colaborador debe descargarlo y colocarlo localmente.
Para verificar que la configuración y el certificado SSL funcionan correctamente, ejecuta el siguiente comando desde la carpeta backend:
python app/infrastructure/test_db_connection.pySi la conexión es exitosa, verás:
✅ Conexión exitosa a la base de datos.
Si hay algún error, revisa las variables en .env, la ruta del certificado y la configuración de tu servidor MySQL en Azure.
El backend ya incluye una estructura Clean / Layered Architecture:
app/api/→ Endpointsapp/application/→ Lógica de negocio (services)app/core/→ Configuración general y seguridadapp/domain/→ Entidades y schemasapp/infrastructure/→ DAOs, base de datos, adaptadores externosapp/tests/→ Pruebas unitarias
El proyecto utiliza .gitignore global en la raíz para todos los subproyectos.