Gatekeeper es una solución empresarial robusta diseñada para centralizar, estandarizar y auditar los flujos de aprobación técnica en organizaciones de TI. Elimina la informalidad de los correos electrónicos y chats, proporcionando una plataforma unificada para gestionar despliegues, accesos y cambios de configuración.
- Arquitectura del Sistema
- Características Principales
- Tecnologías y Stack
- Modelo de Datos
- API Reference
- Guía de Instalación Local
- Despliegue en Nube (AWS)
- Usuarios de Prueba
El sistema sigue una arquitectura de N-Capas desacoplada, desplegada en la nube de AWS para alta disponibilidad.

- Frontend (SPA): React + Vite alojado en S3. Maneja la UI, estado y consumo de APIs.
- Backend (API REST): Spring Boot en EC2. Maneja la lógica de negocio, seguridad y orquestación.
- Base de Datos: MySQL en RDS. Persistencia relacional transaccional.
- Notificaciones: Servicio SMTP integrado para alertas en tiempo real.
- Autenticación JWT: Implementación segura de JSON Web Tokens para sesiones stateless.
- RBAC (Role-Based Access Control):
SOLICITANTE: Puede crear y ver sus propias solicitudes.APROBADOR: Puede gestionar solicitudes asignadas y ver historial.ADMIN: Control total del sistema.
- Password Hashing: Encriptación BCrypt para credenciales.
- Ciclo de Vida Completo:
PENDIENTE→APROBADA/RECHAZADA. - Tipificación Dinámica: Categorías extensibles (Despliegue, Acceso, Infraestructura, etc.).
- Priorización: Niveles de urgencia (Baja, Media, Alta, Urgente).
- Generación de Folios: IDs únicos legibles (
SOL-2024-XXXX) para seguimiento.
- Alertas por Correo: Envío automático al responsable cuando se crea una solicitud.
- Traza de Auditoría: Registro inmutable de quién aprobó/rechazó, cuándo y comentarios asociados.
- Framework: Spring Boot 3.2.0
- Lenguaje: Java 17 (LTS)
- ORM: Hibernate / Spring Data JPA
- Seguridad: Spring Security 6
- Base de Datos: MySQL 8.0
- Utilidades: Lombok, JavaMailSender
- Framework: React 18
- Build Tool: Vite
- Estilos: TailwindCSS (Utility-first CSS)
- HTTP Client: Axios (con interceptores para JWT)
- Routing: React Router DOM 6
- Iconos: Heroicons
El esquema relacional está diseñado para integridad y escalabilidad.
usuarios: Almacena credenciales y roles.solicitudes: Tabla central. Contiene FKs asolicitante,responsableytipo_solicitud.tipos_solicitud: Catálogo administrable de tipos de trámites.
| Método | Endpoint | Descripción |
|---|---|---|
POST |
/api/auth/login |
Inicia sesión y retorna JWT. |
POST |
/api/auth/register |
Registra un nuevo usuario. |
| Método | Endpoint | Descripción |
|---|---|---|
POST |
/api/solicitudes |
Crea una nueva solicitud. |
GET |
/api/solicitudes/mis-solicitudes |
Lista solicitudes creadas por el usuario. |
GET |
/api/solicitudes/pendientes |
Lista solicitudes asignadas pendientes de revisión. |
PUT |
/api/solicitudes/{id}/aprobar |
Aprueba una solicitud con comentario. |
PUT |
/api/solicitudes/{id}/rechazar |
Rechaza una solicitud con comentario. |
- Java JDK 17+
- Node.js 18+
- MySQL Server corriendo localmente
- Crea la base de datos:
CREATE DATABASE prueba_tecnica;
- El sistema inicializará automáticamente las tablas y datos semilla (
data.sql) al arrancar.
- Clonar repositorio.
- Ir a
Backend/src/main/resources/application.properties. - Configurar credenciales de BD y Correo (o usar variables de entorno).
- Ejecutar:
./mvnw spring-boot:run
- Ir a carpeta
Frontend. - Crear archivo
.env:VITE_API_URL=http://localhost:8080/api - Instalar y correr:
npm install npm run dev
El proyecto está actualmente desplegado y operativo en AWS.
- EC2 (Backend): Instancia
t3.microcon Amazon Linux 2023. Ejecuta el JAR como serviciosystemd.- IP Pública:
52.15.196.38
- IP Pública:
- RDS (Database): Instancia gestionada MySQL. VPC Peering con EC2 para seguridad.
- S3 (Frontend): Bucket configurado para Static Website Hosting.
El servidor EC2 tiene configuradas las siguientes variables para seguridad:
RDS_ENDPOINT,RDS_USERNAME,RDS_PASSWORDMAIL_USERNAME,MAIL_PASSWORD(App Password de Google)
Para facilitar la revisión del reto, se han precargado los siguientes usuarios (Password universal: password123):
| Username | Rol | Caso de Uso |
|---|---|---|
jperez |
SOLICITANTE |
Usar para crear nuevas solicitudes. |
mgarcia |
APROBADOR |
Usar para aprobar/rechazar solicitudes entrantes. |
crodriguez |
APROBADOR |
Aprobador alternativo. |
admin |
ADMIN |
Acceso total al sistema. |
Este proyecto se distribuye bajo la licencia MIT. Desarrollado para el Reto Técnico Fullstack/Cloud Junior.