Clone o projeto
Vá para a pasta do projeto
cd nestjs-testCries os .env (não precisa editar nada dentro deles)
cp .env.example .env
cp worker/.env.example worker/.envInicie o docker
docker-compose up(se não usar a flag -d poderá ver o terminal atualizando coms os logs de fila)
se quiser se conectar no banco para checar as mudanças na tabela appointment
- localhost:5432
- db: appointments
- user: postgres
- pass: password
Vou deixar alguns payloads aqui para testar com isomnia ou postman
Crie uma nova request:
- Método: POST
- URL: http://localhost:3000/appointments
Em Headers, adicione:
Content-Type: application/json
Em Body (JSON), envie o payload:
{
"psychologistId": "5bcbe5d7-9eb8-4ec9-83c5-0bd6fd9a0227",
"patientName": "jose",
"date": "2025-09-19T11:00:00.000Z"
}
Esse vai dar errado, pq dia 20 é sabado
{
"psychologistId": "a8932ea4-17d5-4632-b83e-c94f8a6e0341",
"patientName": "ana",
"date": "2025-09-20T12:00:00.000Z"
}
Se quiser testar outros psychologistId basta acessar a tabela e ver os uuid, criei 5 com seed
Resolvi usar Docker para facilitar na hora de testar o projeto e ficar tudo no mesmo repo. LocalStack serve para mockar um SQS e enviar as mensagens do producer (API) para o consumer (worker). A API só tem um endpoint (POST) que recebe a request e já envia para a fila do SQS. Se por algum motivo ela não conseguir, ela tenta 3 vezes, aumentando o tempo de espera entre cada tentativa.
O worker tem o arquivo appointments.consumer.ts que fica esperando mensagens aparecerem na fila. Quando ele encontra uma, o arquivo appointments.service.ts processa a mensagem, fazendo todos os checks em relação ao horário, e depois salva no banco. Independente do que acontecer, ele loga alguma mensagem.
Foi minha primeira experiência com NestJS, então tentei ao máximo usar a modularização.
SQS é um serviço gerenciado pela AWS, o que elimina a necessidade de configurar, manter e escalar servidores.
SQS escala automaticamente, sem que o desenvolvedor precise ajustar filas, brokers ou particionamento.
SQS é pay-per-use, você paga apenas pelas mensagens enviadas e recebidas, sem a necessidade de infraestrutura.
Kafka e RabbitMQ exigem provisionamento de máquinas, manutenção de cluster e monitoramento contínuo, mesmo em ambientes de teste.
Com LocalStack, é possível simular o SQS localmente, permitindo testes de integração realistas sem consumir recursos na AWS, para Kafka ou RabbitMQ, você precisaria subir containers ou clusters completos, aumentando complexidade para testes e CI/CD.