Contexto
Você foi designado para desenvolver um microserviço crítico que atua como orquestrador de eventos em uma plataforma B2B. Este serviço receberá eventos de parceiros comerciais, validará, processará e distribuirá para outros microserviços, lidando com milhares de eventos simultâneos.
Requisitos Funcionais
- API REST para recebimento e processamento de eventos:
- Endpoint para receber eventos de parceiros
- Consulta de status de processamento de eventos
- Reprocessamento de eventos com falha
- Estatísticas de processamento
- Cada evento deve conter:
- ID único
- Tipo de evento (VENDA, DEVOLUÇÃO, ATUALIZAÇÃO_ESTOQUE, etc.)
- Dados do evento (payload JSON)
- Origem (ID do parceiro)
- Timestamp
- Status de processamento
- Implementar fluxo de processamento:
- Validação do evento (formato, campos obrigatórios, regras de negócio)
- Enriquecimento de dados (adicionar informações relevantes)
- Distribuição para serviços downstream (simular com filas de mensagens)
- Persistência do histórico de processamento
- Sistema de retry e dead-letter:
- Implementar mecanismo de retry para eventos com falha
- Após N tentativas, mover para uma fila de dead-letter
- Permitir reprocessamento manual de eventos na dead-letter
Requisitos Técnicos
- Utilizar Node.js com TypeScript
- Banco de dados à sua escolha (PostgreSQL ou MongoDB)
- Documentação da API (Swagger/OpenAPI)
- Containerização com Docker e docker-compose
- Testes automatizados
Entrega
- Código fonte em repositório Git público
- README com instruções detalhadas para execução do projeto
- Docker-compose funcional que permita executar a aplicação com um único comando
Observações
- O sistema deve ser projetado para alta concorrência
- Implementar mecanismos de rate limiting para proteger a API
- Considerar aspectos de observabilidade (logs estruturados, métricas)
- Implementar idempotência para garantir processamento único de eventos
- Não é necessário desenvolver interface de usuário, apenas a API REST
Boa sorte!
Context
You have been assigned to develop a critical microservice that acts as an event orchestrator in a B2B platform. This service will receive events from business partners, validate, process, and distribute them to other microservices, handling thousands of simultaneous events.
Functional Requirements
- REST API for receiving and processing events:
- Endpoint to receive events from partners
- Query event processing status
- Reprocess failed events
- Processing statistics
- Each event must contain:
- Unique ID
- Event type (SALE, RETURN, INVENTORY_UPDATE, etc.)
- Event data (JSON payload)
- Source (Partner ID)
- Timestamp
- Processing status
- Implement processing flow:
- Event validation (format, required fields, business rules)
- Data enrichment (add relevant information)
- Distribution to downstream services (simulate with message queues)
- Persistence of processing history
- Retry and dead-letter system:
- Implement retry mechanism for failed events
- After N attempts, move to a dead-letter queue
- Allow manual reprocessing of events in the dead-letter queue
Technical Requirements
- Use Node.js with TypeScript
- Database of your choice (PostgreSQL or MongoDB)
- API documentation (Swagger/OpenAPI)
- Containerization with Docker and docker-compose
- Automated tests
Delivery
- Source code in a public Git repository
- README with detailed instructions for running the project
- Functional docker-compose that allows running the application with a single command
Notes
- The system should be designed for high concurrency
- Implement rate limiting mechanisms to protect the API
- Consider observability aspects (structured logs, metrics)
- Implement idempotency to ensure unique event processing
- It is not necessary to develop a user interface, only the REST API
Good luck!