$cd/projects/shopup
🚧 En Desarrollo Activo
Backend
📅 Sprint 4/∞

ShopUp - Sistema de Gestión de Emprendimientos

Proyecto Final de Ingeniería en Sistemas - PWA para gestión integral de emprendimientos con microservicios, IA y arquitectura hexagonal.

Marzo 2025 - En desarrollo (Sprint 4/∞)
Proyecto Final ISI - Equipo de 4 desarrolladores
17 tecnologías
Ver Demo

$ cat tech-stack.json

// Características destacadas

Arquitectura Hexagonal completa
Microservicios con Spring Cloud Gateway
IA para búsquedas semánticas y audio-to-text
Autenticación OAuth2 con Keycloak
Filtros JWT personalizados
OpenSearch para búsquedas vectoriales
Documentación API automatizada

// Stack tecnológico

Java 24
Spring Boot 3.4.5
Spring Cloud Gateway
Spring Security
Spring Data JPA
PostgreSQL
OpenSearch
Keycloak
Python
FastAPI
OpenAI API
Whisper
Embeddings
Docker
Maven
Swagger/OpenAPI
JWT

🎯 Problema

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.

💡 Solución

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.

📊 Impacto

Sprint 4 completado con funcionalidades core de gestión de emprendimientos, integración de IA operativa, y sistema de autenticación/autorización robusto.

$ git log --oneline --graph sprints/

Desarrollo ágil con sprints de 2 semanas • Actualmente en Sprint 4

Sprint 1: Gestión Básica de Emprendimientos
Completado
Sprint 2: Gestión Completa de Productos
Completado
Sprint 3: IA y Administración de Rubros
Completado
Sprint 4: Funcionalidades Avanzadas con IA y Audio
ACTUAL
En Progreso

📋 User Stories:

  • Consultar producto (vista de emprendedor) con detalles completos
  • Modificar producto existente con validaciones avanzadas
  • Eliminar/Ocultar producto (eliminación lógica)
  • Registrar producto vía audio con transcripción IA
  • Modificar producto vía audio con identificación inteligente
  • Integración Keycloak con Google OAuth
  • Navbar del dashboard de emprendedores

🔧 Logros Técnicos:

Audio-to-text con Whisper para CRUD
IA para análisis y extracción de datos
Google OAuth en Keycloak
Tokens de refresh de sesión
Dashboard con métricas de negocio
UX mejorada con comandos de voz
Eliminación lógica vs física
Sprint 4/∞En desarrollo...

📊 Estadísticas de Desarrollo

3
Sprints Completados
1
En Progreso
20
User Stories Total
8
Semanas de Desarrollo

$ docker-compose ps --services

Arquitectura de microservicios distribuida con Gateway centralizado, servicios especializados y bases de datos dedicadas, implementando patrones DDD y arquitectura hexagonal.

🏗️ Arquitectura de Microservicios

Gateway Layer

API Gateway
:8080
• Enrutamiento
• Autenticación JWT
• Rate Limiting

Services Layer

Core Service
:8081
• Emprendimientos
• Productos
• Arquitectura Hexagonal
AI Service
:8082
• Audio-to-Text
• Embeddings
• Búsqueda Semántica

Data Layer

PostgreSQL
:5432
• Datos principales
• Triggers
OpenSearch
:9200
• Búsquedas vectoriales
• Embeddings
Keycloak
:8083
• OAuth2/JWT
• Gestión usuarios
Backend
Java 24
Spring Boot 3.4.5
Spring Cloud Gateway
Spring Security
Spring Data JPA
Database
PostgreSQL
OpenSearch
Security
Keycloak
JWT
AI/ML
Python
FastAPI
OpenAI API
Whisper
Embeddings
DevOps
Docker
Maven
Other
Swagger/OpenAPI
🔌 Integraciones Externas
Keycloak para SSO y gestión de usuarios
PostgreSQL como base de datos principal
OpenSearch para búsquedas vectoriales
OpenAI API para procesamiento de IA
Docker para containerización

$ kubectl get services --all-namespaces

Deep dive en cada microservicio y sus responsabilidades específicas

API Gateway (Spring Cloud Gateway)
Core Service (Microservicio Principal)
AI Service (Microservicio de IA)

$ git log --grep="fix:" --oneline

Principales desafíos técnicos y cómo los resolví

Implementación de User Stories Académicas
Sistema de Audio-to-Text para CRUD de Productos
Configuración de Keycloak con Docker
Integración Google OAuth con Keycloak
Sincronización de Embeddings con Triggers

$ find . -name "*.java" -o -name "*.py" | head -5

Snippets de código real del proyecto - implementaciones clave

Configuración de Filtros JWT en Gateway
properties
API Gateway (Spring Cloud Gateway)

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"

🔍 Contexto del Código:

Servicio: API Gateway (Spring Cloud Gateway)

Descripción: Punto de entrada único con enrutamiento, autenticación OAuth2 y filtros JWT personalizados

Tech Stack:
Spring Cloud Gateway
Spring Security OAuth2
JWT
+1 más
Estructura de Controller con Arquitectura Hexagonal
java
Core Service (Microservicio Principal)

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);
    }
}

🔍 Contexto del Código:

Servicio: Core Service (Microservicio Principal)

Descripción: Servicio principal con arquitectura hexagonal para gestión de emprendimientos y productos

Tech Stack:
Spring Boot 3.4.5
Spring Data JPA
PostgreSQL
+2 más

$ git log --grep="lesson:" --pretty=format:"%s"

Reflexiones y próximos pasos en el desarrollo

Lecciones Aprendidas
💡

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

Próximos Pasos

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

🎯 Filosofía de Desarrollo

🏗️

Arquitectura Limpia

Separación clara de responsabilidades con arquitectura hexagonal

🔧

Iteración Continua

Desarrollo ágil con sprints de 2 semanas y mejora constante

📚

Aprendizaje Activo

Cada desafío es una oportunidad de crecimiento técnico

¿Interesado en los detalles técnicos?

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!

📧 Disponible para consultas
🤝 Abierto a colaboraciones
🚀 En desarrollo activo