Desafio Yape - Angel Rodriguez #542
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
La solución implementa una arquitectura basada en microservicios con NestJS y Apache Kafka, diseñada para manejar el flujo de transacciones financieras de forma desacoplada, escalable y confiable.
El primer microservicio (trx-microservice) recibe y crea transacciones, publicando eventos en Kafka, mientras que el segundo (anti-fraud-microservice) consume dichos eventos, aplica reglas de validación sobre el monto de la transacción y emite nuevos eventos de aprobación o rechazo, para mayor escalabilidad en el proceso completo ej. Otros microservicios pueden consumir el evento de aprobación para notificar al usuario o debitar de su cuenta de ahorros.
La principal base de datos es con Postgres, y toda la comunicación entre ellos se realiza de forma asíncrona mediante Kafka, siguiendo los principios de Clean Architecture y CQRS (Command Query Responsibility Segregation) para separar la lógica de comandos, consultas y eventos.
⚙️ Tecnologías principales
• NestJS → Framework backend modular y escalable.
• CQRS → Separación entre comandos, consultas y eventos.
• Apache Kafka → Sistema de mensajería distribuida para comunicación asíncrona.
• PostgreSQL → Persistencia de datos transaccionales.
• Docker & Docker Compose → Orquestación y contenedorización de microservicios.
• TypeORM → ORM para interacción con PostgreSQL.
• Node.js 22 (Alpine) → Entorno base ligero y moderno.
🚀 Next Steps
• Implementar el Outbox Pattern en ambos microservicios para garantizar la entrega confiable de eventos y evitar inconsistencias entre las transacciones de base de datos y los mensajes enviados a Kafka.
• Agregar un mecanismo de retry/backoff para la publicación de eventos fallidos.
• Incluir un Inbox Pattern en el servicio consumidor para asegurar idempotencia en los eventos procesados.
• Incorporar monitoring (Datadog / Prometheus / Grafana) para métricas y trazabilidad de eventos Kafka.
Estuvo muy divertido el reto! 🎉