Backend do sistema de gestão de clientes desenvolvido com Nest.js, incluindo autenticação JWT, mensageria com RabbitMQ, observabilidade com Prometheus e documentação Swagger. Parte do teste técnico para Tech Lead da Teddy Open Finance.
Código escalável, performático e modularizado, com foco em organização, segurança e extensibilidade.
**SOBRE O PROJETO • TECH STACK & LIBS • COMO INSTALAR • UTILIZANDO O SISTEMA • OUTROS DETALHES TÉCNICOS • CONSIDERAÇÕES FINAIS •
Este backend foi desenvolvido em Nest.js e implementa funcionalidades para um sistema de gestão de clientes. Ele inclui:
- Autenticação via JWT para proteger endpoints e garantir a segurança.
- Integração com RabbitMQ para mensageria e registro de logs de operações.
- Observabilidade configurada com Prometheus e Grafana.
- Estrutura modularizada e organizada seguindo Clean Architecture, permitindo fácil escalabilidade e manutenção.
Além disso, o projeto foi pensado para ser flexível e extensível, facilitando a adição de novas funcionalidades no futuro.
Aqui estão as tecnologias e bibliotecas utilizadas neste projeto:
- Nest.js - Framework para construção de APIs escaláveis.
- TypeScript - Superset de JavaScript com tipagem estática.
- PostgreSQL - Banco de dados relacional utilizado no sistema.
- TypeORM - ORM para gerenciamento e manipulação de dados.
- JWT - Utilizado para autenticação e autorização.
- RabbitMQ - Sistema de mensageria para registrar logs e eventos.
- Prometheus e Grafana - Ferramentas para observabilidade e monitoramento.
- Swagger - Para geração de documentação interativa da API.
- Jest - Para testes unitários e integração.
Certifique-se de ter o Docker e o Docker Compose instalados na sua máquina. Depois, siga os passos abaixo:
- Navegue até a pasta
backend
e copie o arquivo.env.example
para.env
:
cd backend
cp .env.example .env
DATABASE_URL=postgres://<username>:<password>@<host>:<port>/<database>
JWT_SECRET=your_secret_key
RABBITMQ_URL=amqp://<username>:<password>@<host>:<port>
PROMETHEUS_PORT=9090
🚨 Atenção: Certifique-se de que o backend pode acessar os serviços configurados na
infra
.
No diretório infra
, execute o seguinte comando para buildar e subir os containers:
docker compose up --build
Se preferir rodar o backend manualmente, siga os passos abaixo:
- Instale as dependências do projeto:
npm install
- Execute o comando abaixo para rodar o projeto:
npm run start:dev
- O backend estará acessível em http://localhost:3001.
Com o backend configurado e rodando, você pode acessar e interagir com o sistema:
-
Documentação da API: Acesse http://localhost:3001/api para consultar a documentação interativa gerada pelo Swagger.
-
Autenticação:
- Use os endpoints de login e registro para gerar um token JWT.
- Tokens são necessários para acessar as rotas protegidas via Authorization Header com Bearer Token.
-
CRUD de Clientes:
- Utilize os endpoints de clientes para realizar operações de criar, listar, editar e excluir.
-
Mensageria:
- O backend envia mensagens para o RabbitMQ ao criar, editar ou excluir um cliente. Os consumers só dão log no console, mas poderiam fazer qualquer outra coisa.
- Prometheus: Acesse http://localhost:9090 para visualizar métricas detalhadas.
- Grafana: Dashboards configurados estão disponíveis em http://localhost:3002. Login padrão: admin / admin.
- RabbitMQ: Acesse http://localhost:15672 para monitorar filas e mensagens. Login padrão: guest / guest.
- Você pode reparar no Console que todos eventos que são publicados nas filas do RabbitMQ pelos Producers são escutados pelos Consumers. Eu só coloquei console.log mesmo para demonstrar, mas poderíamos consumir isso em outro serviço ou então fazer qualquer outra coisa com o poder da arquitetura orientada a eventos e mensagerias.
-
Arquitetura Modularizada:
- O projeto segue os princípios de Clean Architecture, Domain Driven Design, SOLID, Design Patterns, além de outros conceitos de System Design com módulos bem separados para responsabilidade clara e fácil escalabilidade.
-
Segurança:
- Todas as rotas protegidas utilizam autenticação JWT.
- Senhas são armazenadas de forma segura utilizando bcrypt.
-
Mensageria:
- O RabbitMQ é utilizado para registrar eventos e logs de operações realizadas no sistema.
-
Observabilidade:
- Prometheus e Grafana são utilizados para monitorar métricas e visualizar dashboards personalizados.
-
Testes Automatizados:
- Testes unitários e de integração cobrem as principais funcionalidades do sistema, garantindo estabilidade e confiabilidade.
- Foram usados diversos padrões de testes, como mocks, spies, Triple A, SUTs, MUts, Test Pyramid na hora de arquitetar...
Este backend foi desenvolvido com muita atenção aos detalhes, incorporando boas práticas de desenvolvimento e organização. Ele está preparado para atender aos requisitos do sistema e crescer com facilidade.
Se houver dúvidas ou sugestões, estou às ordens.