Este projeto consiste em uma infraestrutura de API REST desenvolvida com Java e Spring Boot, projetada para oferecer uma experiência de comunicação escalável e segura. Indo muito além de um CRUD convencional, a aplicação implementa um ecossistema de chat em tempo real com suporte a contatos e uma camada de segurança rigorosa.
A arquitetura foi pensada para refletir cenários reais de produção, integrando WebSockets para baixa latência e uma estratégia de banco de dados híbrida, onde o PostgreSQL garante a integridade dos usuários enquanto o MongoDB gerencia a alta fluidez das mensagens. O projeto também prioriza a resiliência do sistema através de mecanismos de Rate Limiting por IP (Bucket4j) e otimização de performance com Caffeine Cache.
Este trabalho demonstra a aplicação prática de conceitos avançados de backend, incluindo testes automatizados com JUnit 5, versionamento de banco de dados com Flyway e gestão de mídia via Cloudinary, sempre pautado pelas melhores práticas de Clean Code e segurança da informação.
O frontend da aplicação pode ser acessado no seguinte repositório: https://github.com/vitor3211/chat-api-frontend
- Cadastro e login de usuários
- Autenticação com JWT
- Login com Google
- Verificação de email
- Recuperação de senha
- Criação de contatos
- Envio de mensagens em tempo real
- Armazenamento da foto de perfil de usuário
- Proteção com rate limiting
- Java 21
- Maven 3.6.3
- Spring Boot
- WebSocket
- JWT
- Flyway
- Cloudinary
- Postgres
- MongoDB
- Oauth2
- Java 21+
- Maven 3.9+
- PostgreSQL
- MongoDB
- Uma conta na Cloudinary para armazenar imagens
- Uma conta de email para envio de mensagens
Abra o terminal e execute:
git clone https://github.com/vitor3211/chat-api.gite depois:
cd chat-apiPreencha os campos do arquivo .env.example, depois que terminar rode esse comando para transferir as credenciais do .env.example para o .env que será criado automaticamente:
cp .env.example .envUse o comando abaixo para executar os testes e compilar o projeto:
mvn clean installLogo em seguida use esse comando para rodar o projeto:
./mvnw spring-boot:runPara usar e acessar os endpoints da aplicação você pode usar o Postman ou alguma outra tecnologia de sua preferência. Os endpoints serão listados abaixo:
POST /auth/login
POST /auth/register
POST /auth/refresh
POST /auth/verify
POST /auth/resendEmail
POST /auth/updatepassword
PUT /auth/updatepassword/{uuid}
POST /auth/logout
GET /user/me
GET /user/details
POST /room
POST /room/name
GET /room
GET /room/{roomId}/messages
DELETE /room/{contactId}
DELETE /room/messages/{messageId}
POST /files/uploadFile
A API utiliza o protocolo STOMP over WebSockets para garantir que as mensagens sejam entregues.
Endpoint da conexão:
ws://localhost:8080/ws-chat
Fluxo de mensagens:
PUB /app/sendMessage/{roomId}
SUB /topic/chat/{roomId}