API REST para la gestión de fondos de inversión de BTG Pactual. Permite a los clientes vincularse y desvincularse de fondos, consultando su historial de transacciones y saldo disponible.
El proyecto sigue una arquitectura hexagonal (puertos y adaptadores) con Java 17 y Spring Boot 3.2.3. Se usa DynamoDB como base de datos bajo un esquema Single-Table Design, y la API se documenta con (Swagger).
| Entidad | PK | SK |
|---|---|---|
| Cliente | CLIENT#{id} |
INFO |
| Fondo | FUND#{id} |
INFO |
| Suscripción | CLIENT#{clientId} |
SUB#{fundId} |
| Transacción | SUB#{subscriptionId} |
TX#{txId} |
Necesitas Java 17, Maven y Docker.
- Levanta DynamoDB local:
docker-compose up -d- Ejecuta la aplicación:
./mvnw spring-boot:runLa app arranca en http://localhost:8080. Las tablas y datos de prueba se crean automáticamente al iniciar.
Para ver la documentación de la API:
- Swagger UI: http://localhost:8080/swagger-ui.html
- OpenAPI spec: http://localhost:8080/v3/api-docs
./mvnw clean testIncluye pruebas unitarias, de integración con Testcontainers, y validaciones de arquitectura.
Consulta para identificar clientes que tienen inscrito algún producto disponible solo en las sucursales que visitan:
SELECT DISTINCT c.nombre, c.apellidos
FROM Cliente c
INNER JOIN Inscripcion i ON i.idCliente = c.id
WHERE
EXISTS (
SELECT 1 FROM Disponibilidad d
WHERE d.idProducto = i.idProducto
)
AND NOT EXISTS (
SELECT 1 FROM Disponibilidad d
WHERE d.idProducto = i.idProducto
AND d.idSucursal NOT IN (
SELECT v.idSucursal FROM Visitan v
WHERE v.idCliente = c.id
)
);El proyecto incluye una plantilla SAM (template.yaml) para desplegarlo como Lambda + API Gateway + DynamoDB. Todo queda dentro del Free Tier.
sam build
sam deploy --guided # solo la primera vez, después: sam deployUna vez desplegado, SAM muestra la URL del API Gateway en la salida. Los endpoints disponibles son:
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/v1/funds |
Lista todos los fondos |
| GET | /api/v1/clients/{id} |
Consulta un cliente y su saldo |
| POST | /api/v1/clients/{id}/subscriptions |
Suscribirse a un fondo |
| DELETE | /api/v1/clients/{id}/subscriptions/{fundId} |
Cancelar suscripción |
| GET | /api/v1/clients/{id}/subscriptions/{fundId}/history |
Historial de transacciones |
En local, Swagger UI funciona directamente en http://localhost:8080/swagger-ui.html. Sin embargo, al desplegar en AWS, API Gateway no sirve correctamente los archivos estáticos de la interfaz UI, por lo que la forma oficial de consultar y probar la API en producción es mediante Swagger Editor:
- Copia o entra a la URL del descriptor JSON de OpenAPI en producción:
https://p6ugk2x683.execute-api.us-east-1.amazonaws.com/Prod/v3/api-docs - Ve a Swagger Editor y pega el JSON, o impórtalo usando
File > Import URL. - ¡Listo! La API está configurada con CORS completo y el Server URL relativo (
/Prod), por lo que puedes usar el botón Try it out para probar todos los endpoints reales de AWS directamente desde el editor en tu navegador.