Aplicación móvil multiplataforma desarrollada en .NET MAUI para la gestión y monitoreo de dispositivos IoT.
Phanteon es una aplicación cliente que consume una API externa (DevicesAPI) para proporcionar funcionalidades de:
- Gestión de dispositivos IoT
- Monitoreo de alertas en tiempo real
- Visualización de historial de eventos
- Dashboard con estadísticas
- Sistema de autenticación de usuarios
- .NET MAUI - Framework multiplataforma
- CommunityToolkit.Mvvm - Patrón MVVM
- Refit - Cliente HTTP para APIs REST
- Polly - Políticas de resiliencia y reintentos
- C# - Lenguaje de programación
- Android
- iOS
- Windows
- macOS
Phanteon/
├── Models/ # Modelos de datos sincronizados con la API
│ ├── Alerta.cs
│ ├── Dispositivo.cs
│ ├── HistorialDispositivo.cs
│ └── Usuario.cs
├── ViewModels/ # Lógica de presentación (MVVM)
│ ├── BaseViewModel.cs # Clase base con propiedades comunes
│ ├── DiagnosticoViewModel.cs # Dashboard (ya implementado)
│ ├── EjemploTesteoViewModel.cs # Ejemplo de referencia completo
│ └── TestConexionApiViewModel.cs # Solo para pruebas de conexión
├── Views/ # Interfaces de usuario (XAML)
│ ├── DiagnosticoPage.xaml/.cs # Dashboard (ya implementado)
│ └── MainPage.xaml/.cs # Página inicial (ya implementada)
├── Services/
│ ├── Interfaces/ # Interfaces Refit para consumo de API
│ │ ├── IAlertasService.cs
│ │ ├── IDispositivosService.cs
│ │ ├── IHistorialDispositivosService.cs
│ │ └── IUsuariosService.cs
│ └── Implementations/ # Implementaciones de servicios locales
│ └── SecureStorageService.cs
├── Helpers/ # Utilidades y configuración
│ ├── ApiConfiguration.cs # Configuración de URL y timeout
│ ├── ReferenciasAPI.cs # Referencias a endpoints
│ ├── InvertedBoolConverter.cs # Converter para bindings
│ └── StringNotEmptyConverter.cs # Converter para validaciones
├── Docs/ # Documentación del proyecto
│ ├── 01_Introduccion.md
│ ├── 02_Empezar_Aqui.md
│ ├── 03_Tu_Tarea.md
│ ├── 04_Ejemplos_Visuales.md
│ ├── 05_Guia_Rapida_API.md
│ ├── 06_Solucion_Problemas.md
│ ├── 07_Como_Hacer_Commits.md
│ └── Postman/ # Colección de testing de la API
├── Resources/ # Recursos de la aplicación (fuentes, iconos, etc.)
├── Platforms/ # Código específico de plataforma
└── MauiProgram.cs # Configuración e inyección de dependencias
La documentación completa del proyecto está organizada en la carpeta Docs/ (léelos en orden):
- 01_Introduccion.md - Lee esto primero: contexto del proyecto y qué ya está hecho
- 02_Empezar_Aqui.md - Guía de 5 minutos para configurar todo
- 03_Tu_Tarea.md - Tu asignación específica con checklist completo
- 04_Ejemplos_Visuales.md - Mockups y código de ejemplo para copiar
- 05_Guia_Rapida_API.md - Comandos y bindings XAML para usar
- 06_Solucion_Problemas.md - Errores comunes y cómo resolverlos
- 07_Como_Hacer_Commits.md - Cómo escribir buenos commits
- Postman/ - Colección para probar la API con Postman
- Visual Studio 2022 (versión 17.8 o superior)
- .NET 8.0 SDK
- Cargas de trabajo de MAUI instaladas
- Emulador Android o dispositivo físico
- Acceso a la API externa DevicesAPI
git clone https://github.com/Hvelizgr/Phanteon.git
cd Phanteon
# Cambiar a la rama de desarrollo actual
git checkout ControllerBD
# Crear tu rama personal desde ControllerBD
git checkout -b feature/tu-nombre-tarea
# Ejemplo: feature/hector-login
# Ejemplo: feature/persona1-alertas
# Ejemplo: feature/persona2-detalle
# Ejemplo: feature/persona3-dispositivos- NO trabajes directamente en
masteroControllerBD - Cada persona debe crear su propia rama
- Usa el formato:
feature/nombre-tarea
dotnet restoreEditar Helpers/ApiConfiguration.cs según tu entorno:
// Para emulador Android
public static string BaseUrl { get; set; } = "https://10.0.2.2:7026";
// Para Windows Desktop
// public static string BaseUrl { get; set; } = "https://localhost:7026";
// Para dispositivo físico (reemplazar con tu IP)
// public static string BaseUrl { get; set; } = "https://192.168.1.100:7026";Desde Visual Studio:
- Seleccionar la plataforma objetivo (Android, Windows, etc.)
- Presionar F5 para ejecutar
Desde CLI:
dotnet build
dotnet runEste proyecto consume la API DevicesAPI, que es un repositorio externo:
- Repositorio: https://github.com/epinto17/DevicesAPI
- Propietario: Erick Pinto (@epinto17)
- Tecnología: .NET Web API + Entity Framework Core + SQL Server
Nota: Es necesario tener la API corriendo localmente antes de usar Phanteon.
La carpeta Docs/Postman/ contiene:
- Colección completa de requests
- Environment configurado
- Guía detallada de uso
Para importar:
- Abrir Postman
- Import → Seleccionar
API collection.json - Import → Seleccionar
API environment.json
El proyecto incluye TestConexionApiViewModel.cs que sirve ÚNICAMENTE para verificar la conexión con la API. Este archivo NO debe usarse en producción, es solo una herramienta de debugging.
- Héctor Eduardo Véliz Girón (000108304) - Lead Developer & Infrastructure
- 3 desarrolladores adicionales (Ver 03_Tu_Tarea.md)
Cada miembro del equipo crea su propia View + ViewModel completos:
- Héctor: LoginPage + LoginViewModel (adicional a infraestructura)
- Persona 1: AlertasPage + AlertasViewModel
- Persona 2: DetalleDispositivoPage + DetalleDispositivoViewModel
- Persona 3: DispositivosPage + DispositivosViewModel + Navegación
<PackageReference Include="CommunityToolkit.Maui" Version="12.2.0" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageReference Include="Refit" Version="8.0.0" />
<PackageReference Include="Refit.HttpClientFactory" Version="8.0.0" />
<PackageReference Include="Polly" Version="8.6.4" />
<PackageReference Include="Polly.Extensions.Http" Version="3.0.0" />- Infraestructura del proyecto
- Configuración de inyección de dependencias
- Modelos de datos sincronizados con API
- Servicios Refit para consumo de API
- ViewModels base y de ejemplo
- Helpers y converters
- Sistema de almacenamiento seguro
- ViewModel de prueba de conexión (TestConexionApiViewModel)
- Páginas de Login, Alertas, Dispositivos y Detalle
- Sistema de navegación completo (AppShell)
- Validaciones y manejo de errores
- Implementación final de todas las vistas
Ver 06_Solucion_Problemas.md para una lista completa de problemas frecuentes y sus soluciones.
- MVVM Pattern: Separación estricta entre vistas y lógica
- Async/Await: Operaciones asíncronas para todas las llamadas de red
- Inyección de Dependencias: Constructor injection
- Converters: Para transformaciones en XAML bindings
- Nomenclatura: PascalCase para clases, camelCase para variables
master- Rama principal de producción (NO tocar)ControllerBD- Rama de desarrollo actual (NO trabajar directamente aquí)feature/nombre-tarea- Tu rama personal de trabajo
# Asegúrate de estar en ControllerBD
git checkout ControllerBD
# Actualizar desde remoto
git pull origin ControllerBD
# Crear tu rama
git checkout -b feature/tu-nombre-tareaEjemplos de nombres de rama:
feature/hector-loginfeature/maria-alertasfeature/jose-detallefeature/ana-dispositivos-navegacion
# Ver archivos modificados
git status
# Agregar cambios
git add .
# Hacer commit (seguir convenciones en 07_Como_Hacer_Commits.md)
git commit -m "feat: Implementar LoginViewModel con validaciones"
# Subir cambios a tu rama
git push origin feature/tu-nombre-tarea# Cambiar a ControllerBD
git checkout ControllerBD
# Actualizar
git pull origin ControllerBD
# Volver a tu rama
git checkout feature/tu-nombre-tarea
# Traer cambios de ControllerBD a tu rama
git merge ControllerBD
# Resolver conflictos si hay (pedir ayuda si es necesario)
# Después de resolver:
git add .
git commit -m "merge: Actualizar desde ControllerBD"
git push origin feature/tu-nombre-tareaCuando termines tu tarea:
- Ve a GitHub: https://github.com/Hvelizgr/Phanteon
- Click en "Pull Requests" → "New Pull Request"
- Base:
ControllerBD← Compare:feature/tu-nombre-tarea - Título descriptivo: "feat: Implementar LoginPage y LoginViewModel"
- Descripción detallada de lo que hiciste
- Asignar reviewers (compañeros del equipo)
- Click "Create Pull Request"
- ❌ NO trabajar directamente en
master - ❌ NO trabajar directamente en
ControllerBD - ❌ NO hacer
git push --force(puede borrar trabajo de otros) - ❌ NO hacer merge de tu PR sin revisión
- ❌ NO subir archivos grandes (imágenes, videos, etc.)
- ✅ Hacer commits pequeños y frecuentes
- ✅ Usar mensajes de commit descriptivos
- ✅ Actualizar tu rama desde ControllerBD frecuentemente
- ✅ Probar tu código antes de hacer commit
- ✅ Seguir las convenciones en 07_Como_Hacer_Commits.md