Plataforma integral enfocada en la autogestión de pacientes y la administración eficiente de turnos médicos. Este sistema ha sido diseñado bajo principios de Arquitectura Limpia, priorizando la robustez mediante validación estricta y manejo funcional de errores.
El proyecto sigue una estructura modular basada en dominios, facilitando la escalabilidad y el mantenimiento.
graph TD
User((Usuario/Paciente)) --> |"HTTP Requests"| Express[Express.js Server]
Express --> |"Validation (Zod)"| Controllers[Controllers]
Controllers --> |"Business Logic"| Services[Application Services]
Services --> |"Data Access"| Repositories[Repositories]
Repositories --> |"ORM"| Prisma[Prisma ORM]
Prisma --> |"SQL"| MariaDB[(MariaDB Database)]
subgraph "Error Handling"
Results[Neverthrow: Result Object]
GlobalHandler[Global Error Middleware]
end
Services -.-> Results
Controllers -.-> GlobalHandler
Organización inspirada en los principios de "Screaming Architecture", donde la estructura revela la intención del sistema:
src/
├── _assets/ # Recursos estáticos (CSS, JS cliente, imágenes)
├── _shared/ # Código compartido (Errores, Middleware, Layouts)
│ ├── application/ # Lógica de aplicación transversal
│ ├── infrastructure/ # Implementaciones técnicas (Env, DB config)
│ └── views/ # Plantillas base y componentes compartidos
├── [modulo]/ # Módulos por dominio (auth, patients, schedules, etc.)
│ ├── domain/ # Entidades e interfaces de repositorio
│ ├── application/ # Casos de uso y servicios del dominio
│ ├── infrastructure/ # Rutas, Controladores e implementaciones Prisma
│ └── views/ # Plantillas Nunjucks específicas del dominio
├── app.js # Configuración principal de Express
└── server.js # Entry point del servidor
Para garantizar un código de grado industrial, implementamos:
- Validación Estricta (Zod): Todo dato externo (Request Body, Env Vars) es validado contra esquemas rígidos antes de entrar al dominio.
- Manejo Funcional de Errores (Neverthrow): Eliminamos el uso de
try/catchpara lógica de negocio, utilizando objetosResultque fuerzan el manejo de errores de forma explícita y tipada. - Manejo Seguro de Sesiones: Autenticación mediante JWT con almacenamiento persistente en cookies
HttpOnlyySecure. - UI Reactiva: Vistas rápidas mediante Nunjucks (SSR) potenciadas con TailwindCSS y DaisyUI para una experiencia premium.
- Node.js: v20.19.6+
- Database: MariaDB / MySQL (XAMPP recomendado)
- Gestor de Paquetes:
pnpm(recomendado)
| Variable | Descripción | Ejemplo |
|---|---|---|
PORT |
Puerto de escucha | 3000 |
MYSQL_CONNECTION_STRING |
URL de conexión Prisma | mysql://root:@localhost:3306/clinica_angel |
JWT_SECRET |
Secreto para tokens (Min 32 chars) | tu_secreto_super_seguro_minimo_32 |
JWT_EXPIRES |
Tiempo de expiración del token | 1h, 7d |
-
Clonar e Instalar:
git clone https://github.com/EmanuelAngel/clinica-angel.git cd clinica-angel pnpm install -
Base de Datos:
cp .env.example .env # Ajustar credenciales en .env npx prisma migrate dev pnpm run db:seed -
Ejecución:
pnpm run css:build # Generar output.css pnpm run dev # Modo desarrollo con Nodemon
Mantenemos la integridad del sistema mediante:
- Integration Tests: Pruebas de extremo a extremo en rutas críticas.
- Unit Tests: Validación de lógica de servicios y utilidades.
- Linting & Formatting: Reglas estrictas con ESLint y Prettier.
pnpm run test # Ejecutar suite completa
pnpm run test:cov # Reporte de cobertura
pnpm run lint # Análisis estático- Angel Emanuel - Desarrollo Fullstack - GitHub
Proyecto desarrollado para Laboratorio 2 - Universidad de La Punta, San Luis, Argentina.