Este documento describe en detalle la arquitectura actual de la aplicación Metasketch, cubriendo los principales bloques del sistema.
- Plantillas HTML:
- Todas las vistas se encuentran en
templates/, extendiendo siemprebase.html. - Uso de includes y partials para fragmentos reutilizables.
- Todas las vistas se encuentran en
- Interactividad:
- HTMX importado globalmente en
base.htmlpara peticiones asíncronas y actualizaciones parciales de la UI. - Patrón de enhancement progresivo: la app funciona sin JS, pero mejora con HTMX.
- HTMX importado globalmente en
- Estilos:
- Tailwind CSS vía CDN, aplicado a todas las plantillas.
- No se utiliza CSS personalizado ni frameworks externos.
- Recursos estáticos:
- JS, imágenes y otros assets en la carpeta
static/, servidos bajo/static. - Scripts JS en archivos separados, nunca inline.
- JS, imágenes y otros assets en la carpeta
- Framework principal: FastAPI (Python 3.12+), orientado a desarrollo asíncrono, tipado y modular.
- Estructura de carpetas:
app/api/: Rutas y endpoints organizados por funcionalidad, siguiendo el patrón router modular.app/services/: Lógica de negocio desacoplada de las rutas, para facilitar la reutilización y el testeo.app/models/: Modelos Pydantic para validación y serialización de datos, y modelos ORM para la base de datos.app/db/: Gestión de la base de datos, sesiones, migraciones y utilidades de acceso a datos.app/auth/: Lógica de autenticación y autorización, preferentemente OAuth2 con JWT.app/utils/: Funciones auxiliares y utilidades generales.app/middleware/: Middleware personalizado para FastAPI.app/config.py: Configuración centralizada, cargando variables de entorno.app/logging.py: Configuración de logs estructurados en formato JSON.app/tests/: Pruebas unitarias e integración, siguiendo convenciones pytest.
- Base de datos: Soporte para SQLAlchemy ORM con operaciones asíncronas.
- API: Endpoints RESTful bajo
/api/..., devolviendo modelos Pydantic o dicts, conresponse_modelpara claridad de esquema. - Autenticación: OAuth2 con JWT tokens, gestionado en
app/auth/.
- Gestión centralizada:
- Todas las dependencias Python se declaran en
pyproject.toml. - Se utiliza
uvpara instalar, sincronizar y bloquear versiones, asegurando entornos reproducibles. - El archivo
uv.lockgarantiza la consistencia entre entornos de desarrollo y producción.
- Todas las dependencias Python se declaran en
- Instalación y actualización:
- Nuevas dependencias se añaden con
uv addy se sincronizan conuv sync.
- Nuevas dependencias se añaden con
- Gestión:
- Variables sensibles y de configuración (puertos, modo, claves, etc.) se almacenan en
.env. - Se cargan automáticamente al iniciar la app mediante
python-dotenv(verapp/__init__.py).
- Variables sensibles y de configuración (puertos, modo, claves, etc.) se almacenan en
- Ejemplo:
.env.examplesirve como plantilla para nuevos entornos.
- Uso:
- Todas las configuraciones críticas se leen desde variables de entorno a través de
app/config.py.
- Todas las configuraciones críticas se leen desde variables de entorno a través de
Este documento refleja la arquitectura actual y servirá de base para futuras refactorizaciones y mejoras estructurales.