Este repositório contém a implementação do teste técnico para a Big Chat Brasil (BCB). O projeto visa simular um sistema simplificado de comunicação, permitindo o envio e visualização de mensagens entre empresas e seus clientes, com funcionalidades essenciais para gerenciamento de clientes, autenticação, controle de planos financeiros e processamento de mensagens em fila.
A solução foi desenvolvida com foco em uma arquitetura modular e escalável, utilizando NestJS como framework principal, PostgreSQL para persistência de dados e Redis para gerenciamento de filas de mensagens.
- API de Autenticação e Gerenciamento de Clientes: endpoints completos para autenticação (CPF/CNPJ), criação, listagem, consulta e atualização de clientes, incluindo verificação de saldo/limite.
- Fila em Memória para Processamento de Mensagens: Utilização do BullMQ com Redis para um sistema de fila, realizando o processamento assíncrono mensagens.
- Validação Financeira de Plano: Lógica para distinção e validação de clientes com planos pré ou pós-pagos.
- Histórico de Conversas: Endpoints para listagem de conversas e mensagens de um cliente autenticado.
- Envio e Processamento de Mensagens: Estrutura para o envio de novas mensagens e consulta de seu status.
- Autenticação JWT e Controle de Acesso: Proteção de endpoints sensíveis com JWT Token e implementação de roles para controle de acesso (ex: administradores podem listar todos os clientes).
- Documentação Interativa: Integração com Swagger para documentação automática dos endpoints, acessível em
/docs
. - Testes Automatizados: Cobertura de testes unitários por módulo para garantir a estabilidade e o correto funcionamento das funcionalidades.
- Tratamento de Concorrência: Gerenciamento de operações concorrentes através do BullMQ.
- Backend: NestJS (Framework Node.js)
- Banco de Dados: PostgreSQL
- Fila/Cache: Redis
- ORM: TypeORM
- Filas de Mensagens: BullMQ
- Autenticação: Passport.js + Passport JWT
- Documentação de API: Swagger
- Logs: Winston
- Testes: Jest
- Containerização: Docker
O projeto segue uma arquitetura em camadas e uma estrutura modular, o que facilita a separação de responsabilidades, manutenção e escalabilidade.
big-chat-backend/
│
├── src/
│ ├── modules/ # Módulos de funcionalidades (Auth, Clients, Messages, Conversations, Queue)
│ │ ├── auth/
│ │ ├── clients/
│ │ ├── messages/
│ │ ├── conversations/
│ │ └── queue/
│ │
│ ├── database/ # Configurações do banco de dados
│ ├── common/ # Utilitários comuns (filtros, interceptors, pipes)
│ ├── main.ts # Ponto de entrada da aplicação
│ ├── app.module.ts # Módulo raiz
│ └── app.controller.ts
│
├── test/ # Testes end-to-end
├── .env # Variáveis de ambiente
├── .gitignore
├── package.json
├── tsconfig.json
└── README.md
O projeto foi configurado para ser executado facilmente utilizando Docker.
-
Pré-requisitos: Certifique-se de ter o Docker e Docker Compose instalados em sua máquina.
-
Variáveis de Ambiente: Crie um arquivo
.env
na raiz do projeto (na mesma pasta dodocker-compose.yml
) com as seguintes variáveis:Exemplo de .env:
DB_PASSWORD=mysecretpassword # Senha do banco de dados PostgreSQL DB_DATABASE=my_database # Nome do banco de dados PostgreSQL PORT=3000 # Porta em que a API será executada MODE=DEV # Modo de execução (ex: DEV, PROD) REDIS_HOST=redis # Host do Redis (nome do serviço no docker-compose) REDIS_PORT=6379 # Porta do Redis JWT_SECRET=your_jwt_secret_here # Chave secreta para JWT
Dica: Você pode gerar uma chave JWT segura em jwtsecret.com/generate.
-
Iniciar o Projeto: No terminal, navegue até a raiz do projeto e execute o seguinte comando:
Bash
docker-compose up --build
Este comando irá construir as imagens Docker, subir os contêineres do PostgreSQL, Redis e da aplicação NestJS.
-
Acesso à API: Uma vez que os contêineres estejam em execução, a API estará acessível em
http://localhost:3000
. -
Documentação da API: A documentação interativa da API, gerada pelo Swagger, pode ser acessada em
http://localhost:3000/docs
.
Os testes automatizados podem ser executados após o setup do projeto, garantindo que todas as funcionalidades estejam operando conforme o esperado.
Para rodar os testes, execute:
Bash
npm run test