Desafio Backend - BCB Chat API
O BCB (Big Chat Brasil) API é um sistema backend em Java (Spring Boot) para gerenciamento de clientes, conversas e mensagens com sistema de filas prioritárias.
Funcionalidades implementadas:
- Autenticação simples via CPF/CNPJ com token Bearer (UUID).
- CRUD de Clientes (pré-pago/pós-pago) e consulta de saldo/limite.
- CRUD de Conversas, listagem e obtenção de mensagens por conversa.
- Envio e recepção de Mensagens (FIFO com priorização URGENT/NORMAL).
- Sistema de Fila em memória (PriorityBlockingQueue) com processamento automático em background.
- Endpoint de estatísticas da fila (
GET /queue/status).
- Java 21
- Spring Boot (Web, Security, Data JPA, Validation)
- PostgreSQL
- Docker & Docker Compose
- Springdoc OpenAPI (Swagger UI)
- Lombok
src/main/java/com/bcb/
├── config/
│ └── docs/ # Interfaces de documentação Swagger
├── controller/ # Controllers REST
├── dto/ # Data Transfer Objects
├── mapper/ # Mappers entre DTOs e Entities
├── model/ # Entidades JPA e enums
├── repository/ # Repositórios Spring Data
├── service/ # Regras de negócio
└── infra/ # Fila e worker em background
O projeto inclui um docker-compose.yml que orquestra:
- app: a aplicação Spring Boot
- db: container PostgreSQL
-
Clone o repositório:
- Usando SSH:
git clone git@github.com:CarlosLonghi/BCB-Challenge-Irrah-Tech.git
- Usando HTTPS:
git clone https://github.com/CarlosLonghi/BCB-Challenge-Irrah-Tech.git
- Usando SSH:
-
Acesse o diretório:
cd BCB-Challenge-Irrah-Tech -
Inicie os containers:
docker compose up -d --build
-
Acesse a API em
http://localhost:8080e o Swagger UI emhttp://localhost:8080/swagger-ui/index.html.
POST /auth– Gera token bearer com CPF/CNPJ do Cliente. (endpoint público)
POST /clients– Cria cliente. (endpoint público)GET /clients– Lista clientes.GET /clients/:id– Obtém detalhes de um cliente.PUT /clients/:id– Atualiza dados do cliente.GET /clients/:id/balance– Consulta saldo/limite do cliente.
POST /messages– Envia nova mensagem (cria conversa se necessário).GET /messages– Lista mensagens do usuário autenticado.GET /messages/:id– Obtém detalhes de uma mensagem.GET /messages/:id/status– Verifica status de envio de uma mensagem.
GET /conversations– Lista conversas do cliente autenticado.GET /conversations/:id– Obtém detalhes de uma conversa.GET /conversations/:id/messages– Lista mensagens de uma conversa.
GET /queue/status– Estatísticas da fila (quantidade por status e prioridade).
- Autenticação: uso de tokens UUID e Spring Security para simplicidade.
- DTO vs. Model: separação clara entre entidades JPA e objetos de API.
- Fila em Memória: prioridade URGENT > NORMAL, sem persistência de fila.
- Processamento: sincronizado em background, sem sistema de retry avançado.
Limitações / Trabalho Futuro:
- Implementar JWT em vez de UUID.
- Criar Migrations usando Flyway.
- Persistir a fila em banco (para tolerância a falhas).
- Adicionar paginação e filtros avançados nas listagens.
- Testes automatizados (unitários e de integração).
- Documentar OpenAPI completo com exemplos completos.
- Configurar CI/CD e métricas de performance.
Desenvolvido por Carlos Longhi