Reporte de la arquitectura final del proyecto S3 - JohannPaezU/MISW4501-MediSupply GitHub Wiki
Reporte de Arquitectura — MediSupply
Este documento describe la arquitectura final del proyecto MediSupply, cubriendo las tres capas principales: backend, frontend (web) y mobile (Android). Presenta la estructura de carpetas relevantes, los componentes clave, el flujo de datos, consideraciones de despliegue, seguridad, pruebas y recomendaciones operativas.
Alcance
- Componentes cubiertos:
backend/, frontend/, mobile/.
- No se detallan artefactos externos fuera del repositorio (p. ej. infra cloud específica).
Visión General de la Arquitectura
La aplicación está dividida en tres capas principales:
| Capa |
Tecnología |
Ubicación |
| Backend |
Python (FastAPI) |
backend/ |
| Frontend |
Angular (TypeScript) |
frontend/ |
| Mobile |
Android (Kotlin/Java) |
mobile/ |
Comunicación entre capas
- El frontend y la app mobile realizan llamadas HTTP(S) a la API del backend.
- El backend persiste datos en la capa de almacenamiento (módulo
db/) y aplica reglas de negocio en services/.
┌─────────────┐ ┌─────────────┐
│ Frontend │ │ Mobile │
│ (Angular) │ │ (Android) │
└──────┬──────┘ └──────┬──────┘
│ HTTPS │
└────────┬───────────┘
▼
┌───────────────┐
│ Backend API │
│ (FastAPI) │
└───────┬───────┘
│
┌───────▼───────┐
│ Database │
└───────────────┘
Backend
- Ubicación:
backend/
- Framework: FastAPI (Python) — ver
requirements.txt
- Punto de entrada:
backend/src/main.py
Estructura de carpetas
backend/
├── src/
│ ├── main.py # Aplicación principal
│ ├── core/
│ │ ├── config.py # Configuración de la app
│ │ ├── logging_config.py# Configuración de logs
│ │ ├── security.py # Autenticación y autorización
│ │ └── utils.py # Utilidades compartidas
│ ├── db/ # Capa de persistencia / ORM
│ ├── dependencies/ # Inyección de dependencias
│ ├── errors/ # Manejo de errores
│ ├── models/ # Modelos de datos (ORM)
│ ├── routers/ # Endpoints agrupados por recurso
│ ├── schemas/ # Esquemas Pydantic (validación)
│ ├── services/ # Lógica de negocio
│ └── templates/ # Plantillas (emails, reportes)
├── tests/ # Pruebas unitarias e integración
├── Dockerfile # Imagen Docker
├── docker-compose.yml # Orquestación local
├── Procfile # Despliegue PaaS (Heroku)
├── pytest.ini # Configuración pytest
└── requirements.txt # Dependencias Python
Seguridad y Autenticación
- Implementación en
backend/src/core/security.py (JWT / token-based auth).
- Recomendación: variables de entorno para secretos (
JWT_SECRET, credenciales DB) y TLS en producción.
Observabilidad
logging_config.py centraliza logs; integrar con ELK/Datadog en producción.
Frontend (Web)
- Ubicación:
frontend/
- Framework: Angular
- Punto de entrada:
frontend/src/main.ts
Estructura de carpetas
frontend/
├── src/
│ ├── index.html
│ ├── main.ts
│ ├── styles.css
│ ├── app/ # Componentes, servicios, módulos
│ ├── assets/ # Recursos estáticos
│ └── environments/ # Variables de entorno (API URLs)
├── angular.json # Configuración Angular CLI
├── package.json # Dependencias npm
├── tsconfig.json # Configuración TypeScript
├── karma.conf.js # Configuración de tests
└── firebase.json # Deploy en Firebase Hosting (opcional)
Comunicación
- Consume la API REST del backend mediante
HttpClient.
- Endpoints configurados en
environments/environment.ts.
Testing
- Pruebas unitarias con Karma/Jasmine.
- Ejecutar:
npm test
Mobile (Android)
- Ubicación:
mobile/
- Build system: Gradle
- Lenguaje: Kotlin / Java
Estructura de carpetas
mobile/
├── app/
│ ├── src/ # Código fuente Android
│ └── build.gradle # Configuración del módulo app
├── gradle/ # Wrapper y catálogo de versiones
├── build.gradle # Configuración raíz
├── settings.gradle
├── gradlew / gradlew.bat # Scripts de Gradle
└── local.properties # Configuración local (SDK path)
Integración
- Consume las mismas APIs REST que el frontend.
- Compartir contratos (endpoints y esquemas) entre frontend y mobile.
Flujo de Datos (alto nivel)
- Usuario realiza acción en frontend o mobile (login, crear orden, solicitar reporte).
- Cliente envía solicitud HTTP(S) con credenciales/token.
- Backend valida autenticación/autorización en
core/security.py y enruta a routers/.
- Lógica de negocio en
services/ procesa la solicitud y persiste/consulta en db/.
- Backend devuelve respuesta JSON al cliente; frontend/mobile actualizan UI.
Despliegue
Entorno de desarrollo (local)
# Backend (Docker Compose)
cd backend
docker-compose up --build
# Frontend (Angular dev server)
cd frontend
npm install
npm start
# Mobile (debug APK)
cd mobile
./gradlew assembleDebug
Entorno de producción
| Componente |
Estrategia recomendada |
| Backend |
Contenedor Docker en Kubernetes o PaaS (Heroku con Procfile) |
| Frontend |
Build estático (ng build --prod) servido en CDN/NGINX |
| Mobile |
Release APK/AAB publicado en GitHub Artifacts |
Seguridad y Buenas Prácticas
- Secretos: nunca en el repositorio; usar variables de entorno o secret managers.
- HTTPS: obligatorio en todas las comunicaciones cliente-servidor.
- Validación: sanitizar inputs en
schemas/ y capa de servicios.
- Autorización: aplicar roles y scopes; principio de mínimo privilegio.
Testing y Calidad
| Capa |
Herramienta |
Comando |
| Backend |
pytest |
pytest |
| Frontend |
Karma / Jasmine |
npm test |
| Mobile |
JUnit / Espresso |
./gradlew test |
Observabilidad y Monitoreo
- Logs estructurados (JSON) desde
logging_config.py.
- Métricas de latencia y errores en endpoints críticos.
- Alertas configuradas en plataforma de monitoreo.
Apéndice
Archivos importantes
| Archivo |
Descripción |
backend/Dockerfile |
Imagen Docker del backend |
backend/docker-compose.yml |
Orquestación local |
backend/Procfile |
Despliegue PaaS |
frontend/angular.json |
Configuración Angular |
frontend/package.json |
Dependencias npm |
mobile/gradlew |
Script de build Gradle |