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

  1. El frontend y la app mobile realizan llamadas HTTP(S) a la API del backend.
  2. 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)

  1. Usuario realiza acción en frontend o mobile (login, crear orden, solicitar reporte).
  2. Cliente envía solicitud HTTP(S) con credenciales/token.
  3. Backend valida autenticación/autorización en core/security.py y enruta a routers/.
  4. Lógica de negocio en services/ procesa la solicitud y persiste/consulta en db/.
  5. 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