Skip to content

Comments

feat: microservices transaccion and anti-fraude done#595

Open
joseguzman25 wants to merge 1 commit intoyaperos:mainfrom
joseguzman25:main
Open

feat: microservices transaccion and anti-fraude done#595
joseguzman25 wants to merge 1 commit intoyaperos:mainfrom
joseguzman25:main

Conversation

@joseguzman25
Copy link

Resumen del Proyecto

Implementación del Yape Code Challenge usando Java 21 y Spring Boot 4, con arquitectura hexagonal y dos microservicios:

  • Productor: expone endpoints REST para crear y consultar transacciones.
  • Anti-Fraude: consumidor Kafka que valida transacciones y publica resultados.

Comunicación asincrónica mediante Apache Kafka, persistencia en PostgreSQL y cache en Redis.


Principales Logros

  • API REST para creación (POST /transactions) y consulta (GET /transactions/{id}).
  • Flujo asincrónico robusto: Productor → Kafka → Anti-Fraude → Kafka → Productor.
  • Regla Anti-Fraude: transacciones > 1000 rechazadas, resto aprobadas.
  • Kafka idempotente, Redis caching y logs estructurados JSON.
  • 45 pruebas unitarias con +90% de cobertura, tests de integración con EmbeddedKafka, H2 y Redis.
  • Docker Compose listo para producción con healthchecks y DLT para mensajes fallidos.

Tecnologías Principales

Componente Tecnología / Herramienta
Lenguaje Java 21
Framework Spring Boot 4
Base de Datos PostgreSQL 15
Cache Redis 7
Mensajería Apache Kafka 7.6
Testing JUnit 5, EmbeddedKafka, H2, Awaitility
Logging Logback + JSON estructurado
Contenerización Docker + Docker Compose

Futuras Mejoras

  • Seguridad con JWT y control de acceso.
  • Escalabilidad con Kubernetes y autoescalado.
  • Observabilidad avanzada y tracing distribuido.

Instrucciones para Ejecutar y Probar el Proyecto

  1. Levantar el ambiente con Docker Compose:
docker-compose up --build

Esto iniciará todos los servicios: PostgreSQL, Kafka, Zookeeper, Redis, Productor (8080) y Anti-Fraude (8081).

Crear una transaccion

curl -X POST http://localhost:8080/transactions \
  -H "Content-Type: application/json" \
  -d '{
        "accountExternalIdDebit": "550e8400-e29b-41d4-a716-446655440000",
        "accountExternalIdCredit": "550e8400-e29b-41d4-a716-446655440001",
        "transferTypeId": 1,
        "value": 120
      }'

Consultar una transaccion

curl http://localhost:8080/transactions/{transactionExternalId}

Probar reglas de Anti-Fraude

  • Valor ≤ 1000status: APPROVED
  • Valor > 1000status: REJECTED

Ejecutar tests

./mvnw clean test

Autor

Nombre: José Guzman Gonzales

Email: joseguzmangonzales21.08@gmail.com

GitHub: github.com/joseguzman

LinkedIn: linkedin.com/in/joseguzman

Fecha

Febrero 2026

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant