Skip to content

grandre/nestjs-test

Repository files navigation

Rode Local

Clone o projeto

Vá para a pasta do projeto

  cd nestjs-test

Cries os .env (não precisa editar nada dentro deles)

  cp .env.example .env
  cp worker/.env.example worker/.env

Inicie o docker

  docker-compose up

(se não usar a flag -d poderá ver o terminal atualizando coms os logs de fila)

Database

se quiser se conectar no banco para checar as mudanças na tabela appointment

  • localhost:5432
  • db: appointments
  • user: postgres
  • pass: password

Payloads

Vou deixar alguns payloads aqui para testar com isomnia ou postman

No insomnia

Crie uma nova request:

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

Arquitetura

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 em comparação com rabbitmq ou kafka

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors