Proyecto Final de Ingeniería en Sistemas - PWA para gestión integral de emprendimientos con microservicios, IA y arquitectura hexagonal.
Desarrollar un sistema integral para la gestión de emprendimientos que permita registro, modificación, consulta y baja de cuentas, cumpliendo con user stories académicas específicas.
Sistema distribuido con microservicios, implementando arquitectura hexagonal, autenticación OAuth2, procesamiento de IA para audio y búsquedas semánticas, con bases de datos relacionales y vectoriales.
Sprint 4 completado con funcionalidades core de gestión de emprendimientos, integración de IA operativa, y sistema de autenticación/autorización robusto.
Desarrollo ágil con sprints de 2 semanas • Actualmente en Sprint 4
Arquitectura de microservicios distribuida con Gateway centralizado, servicios especializados y bases de datos dedicadas, implementando patrones DDD y arquitectura hexagonal.
Deep dive en cada microservicio y sus responsabilidades específicas
Principales desafíos técnicos y cómo los resolví
Snippets de código real del proyecto - implementaciones clave
Configuración de filtros que permiten autorización granular comparando UUIDs del path/query con claims JWT
# Filtro para emprendimientos y productos con UUID en path
shopup.gateway.filter.jwt-id-match.rules[0].name="EmprendimientoProductoGeneralPathUUID"
shopup.gateway.filter.jwt-id-match.rules[0].pathRegex=".*/(emprendimientos|productos)(?:/[a-zA-Z0-9_\\-]+)?/([a-fA-F0-9\\-]{36})(?:/.*)?$"
shopup.gateway.filter.jwt-id-match.rules[0].extractionStrategy=PATH_REGEX_GROUP
shopup.gateway.filter.jwt-id-match.rules[0].pathRegexGroupId=2
shopup.gateway.filter.jwt-id-match.rules[0].jwtClaimName="sub"
# Filtro para productos por query param
shopup.gateway.filter.jwt-id-match.rules[1].pathRegex=".*/productos$"
shopup.gateway.filter.jwt-id-match.rules[1].extractionStrategy=QUERY_PARAM
shopup.gateway.filter.jwt-id-match.rules[1].queryParamName="idEmprendimiento"
Servicio: API Gateway (Spring Cloud Gateway)
Descripción: Punto de entrada único con enrutamiento, autenticación OAuth2 y filtros JWT personalizados
Controller que actúa como adaptador entre HTTP y el dominio, usando DTOs y delegando lógica al service
@RestController
@RequestMapping("/api/emprendimientos")
@Tag(name = "Emprendimientos", description = "Gestión de cuentas de emprendimiento")
public class EmprendimientoController {
private final EmprendimientoService emprendimientoService;
private final ModelMapper modelMapper;
@PostMapping
@Operation(summary = "Registrar nuevo emprendimiento")
public ResponseEntity<EmprendimientoResponseDto> registrarEmprendimiento(
@Valid @RequestBody EmprendimientoRequestDto request) {
// Mapeo a modelo de dominio
Emprendimiento emprendimiento = modelMapper.map(request, Emprendimiento.class);
// Lógica de negocio en el service
Emprendimiento creado = emprendimientoService.registrar(emprendimiento);
// Mapeo a DTO de respuesta
EmprendimientoResponseDto response = modelMapper.map(creado, EmprendimientoResponseDto.class);
return ResponseEntity.status(HttpStatus.CREATED).body(response);
}
}
Servicio: Core Service (Microservicio Principal)
Descripción: Servicio principal con arquitectura hexagonal para gestión de emprendimientos y productos
Reflexiones y próximos pasos en el desarrollo
La arquitectura hexagonal facilita enormemente el testing y mantenimiento del código
Spring Cloud Gateway es poderoso pero requiere configuración cuidadosa de filtros
Los triggers de base de datos son útiles para sincronización pero complejizan debugging
Keycloak tiene curva de aprendizaje alta pero vale la pena para autenticación enterprise
Docker compose simplifica desarrollo local con múltiples servicios
FastAPI con Python es excelente para servicios de IA especializados
La validación Bean Validation debe complementarse con validaciones de negocio en services
OpenAPI/Swagger es esencial para documentar APIs en equipos
Sprint 5: Implementar gestión de órdenes y carrito de compras
Sprint 6: Sistema de notificaciones y emails
Sprint 7: Dashboard de analytics para emprendedores
Optimización: Implementar cache Redis para consultas frecuentes
Testing: Aumentar cobertura de tests de integración
Deploy: Configurar CI/CD pipeline con GitHub Actions
Separación clara de responsabilidades con arquitectura hexagonal
Desarrollo ágil con sprints de 2 semanas y mejora constante
Cada desafío es una oportunidad de crecimiento técnico
Este proyecto está en desarrollo activo como parte de mi Proyecto Final de Ingeniería en Sistemas. Si tienes preguntas sobre la implementación o quieres discutir sobre arquitectura de microservicios, ¡no dudes en contactarme!