Aplicación móvil interactiva con mapa 3D de la Universidad Tecnológica de Bolívar (UTB), diseñada para guiar a estudiantes, visitantes y personal dentro del campus. Permite ubicar salones, baños, laboratorios, cafeterías, bibliotecas, escaleras y ascensores, e incluye un puntero de ubicación en tiempo real dentro de las instalaciones.
- Diego Rosales Garza
- Rodrigo Vazquez Rico
- Angel Fabian Gutierrez Gomez
- Estudiantes de nuevo ingreso
- Visitantes y padres de familia
- Personal administrativo y docente
- Dirección de Tecnología de la UTB
| Capa | Tecnología |
|---|---|
| Frontend Móvil | Flutter (Dart) |
| Backend API | NestJS (TypeScript) |
| Base de Datos | Supabase (PostgreSQL + PostGIS) |
| Autenticación | Supabase Auth |
| Almacenamiento | Supabase Storage |
| Tiempo Real | Supabase Realtime |
Estilo seleccionado: Monolito Modular (para ambos backend y frontend)
Justificación: Equilibrio pragmático entre testabilidad, bajo acoplamiento a Supabase, onboarding rápido para equipo de 3 personas, y evolución natural. Ver ADR-0001 y Matriz Comparativa.
backend/src/
├── modules/
│ ├── mapas/ # Edificios, pisos, modelos 3D
│ ├── ubicacion/ # Geolocalización, fallback manual
│ ├── auth/ # Supabase Auth, JWT, roles
│ └── pois/ # Puntos de interés
├── shared/
│ ├── kernel/ # Entity, ValueObject, UseCase, Repository
│ ├── supabase/ # Cliente Supabase singleton
│ ├── errors/ # AppError, DomainError, InfrastructureError
│ └── config/ # ConfigModule con validación Joi
└── health.controller.ts
frontend/lib/
├── features/
│ ├── mapas/ # Domain, Application, Infrastructure, Presentation
│ ├── ubicacion/ # GPS, permisos, ubicación manual
│ ├── auth/ # Login, registro, tokens
│ └── pois/ # Puntos de interés
├── core/
│ ├── kernel/ # Result, UseCase, Entity, ValueObject
│ ├── di/ # get_it injector
│ ├── network/ # Dio client, interceptors
│ ├── storage/ # LocalStorage (Hive), SecureStorage
│ └── platform/ # Permissions, Location services
└── shared/
├── widgets/ # UI kit común
├── theme/ # AppTheme (light/dark)
└── extensions/ # Dart extensions
| Documento | Ubicación | Descripción |
|---|---|---|
| arc42 Sección 4: Contexto y Fronteras | docs/arc42/arc42-template-EN.md#section-context-and-boundaries |
Actores, sistemas externos, fronteras de negocio y técnicas |
| Matriz Comparativa de Patrones | docs/comparativa-de-arquitecturas.md |
Capas vs Hexagonal vs Monolito Modular con criterios ponderados |
| ADR-0001: Estilo Arquitectónico | docs/adr/0001-estilo-arquitectonico-propuesto.md |
Decisión formal con consecuencias y plan de implementación |
| C4 Nivel 1: Contexto | docs/c4/C4_L1_Context.png (Mermaid) |
Diagrama de contexto del sistema (actores + Supabase + SO Location) |
| C4 Nivel 2: Contenedor | docs/c4/C4_L2_Container.png (Mermaid) |
Desglose en App Flutter, API NestJS, Supabase (Auth/DB/Storage/Realtime), caché Hive/Filesystem |
| Escenarios de Calidad (EC-01 a EC-04) | docs/arc42/arc42-template-EN.md#section-quality-scenarios |
Rendimiento, fluidez, ubicación, disponibilidad |
- Node.js ≥ 18 (para backend NestJS)
- Flutter ≥ 3.19 (para frontend)
- Cuenta Supabase con proyecto creado (PostgreSQL + PostGIS habilitado)
git clone <repo-url>
cd AS_202620_ElMapita# Backend
cp backend/.env.example backend/.env
# Editar backend/.env con tus credenciales Supabase:
# SUPABASE_URL=https://tu-proyecto.supabase.co
# SUPABASE_SERVICE_ROLE_KEY=tu-service-role-key
# SUPABASE_ANON_KEY=tu-anon-key# Backend
cd backend && npm install
# Frontend
cd ../frontend && flutter pub getOpción A: Script unificado (Linux/macOS/Git Bash)
./scripts/dev.shOpción B: Script unificado (Windows PowerShell)
.\scripts\dev.ps1Opción C: Terminales separadas
Terminal 1 - Backend:
cd backend && npm run start:dev
# Backend en http://localhost:3000
# Swagger en http://localhost:3000/docsTerminal 2 - Frontend:
cd frontend && flutter run
# Selecciona dispositivo/emuladorcd backend
npm run test
# Health check: GET http://localhost:3000/healthcd frontend
flutter test
# Widget test: App loads correctly| Proyecto | Comando | Qué prueba |
|---|---|---|
| Backend | npm run test |
Unit tests (Jest) |
| Backend | npm run test:e2e |
Integration tests |
| Backend | npm run test:cov |
Coverage report |
| Frontend | flutter test |
Unit + Widget tests |
| Frontend | flutter test integration_test/ |
Integration tests |
AS_202620_ElMapita/
├── backend/ # NestJS API
│ ├── src/
│ │ ├── modules/ # Feature modules (Monolito Modular)
│ │ ├── shared/ # Kernel, Supabase client, errors, config
│ │ ├── app.module.ts # Root module
│ │ ├── main.ts # Bootstrap + Swagger
│ │ └── health.controller.ts
│ ├── test/ # E2E tests
│ ├── package.json
│ └── .env.example
├── frontend/ # Flutter App
│ ├── lib/
│ │ ├── features/ # Feature modules (Monolito Modular)
│ │ ├── core/ # Kernel, DI, Network, Storage, Platform
│ │ ├── shared/ # Widgets, Theme, Extensions
│ │ ├── app.dart # App root + routing
│ │ └── main.dart # Entry point + Supabase init
│ ├── test/ # Unit + Widget tests
│ ├── integration_test/ # Integration tests
│ └── pubspec.yaml
├── docs/
│ ├── arc42/
│ │ └── arc42-template-EN.md # Documentación arc42 completa
│ ├── adr/
│ │ └── 0001-estilo-arquitectonico-propuesto.md
│ ├── c4/
│ │ └── C4_Contexto.png # Diagrama C4 Nivel 1
│ └── comparativa-de-arquitecturas.md
├── scripts/
│ ├── dev.sh # Startup script (Unix)
│ └── dev.ps1 # Startup script (Windows)
└── README.md
modelos-3d— Archivos.glb/.gltfde modelos 3D por edificio/versión