O objetivo dessa aplicação foi implementar um sistema de criação de usuários com um módulo de notificações em tempo real para esses usuários.
Os usuários são criados em uma base Mongo, autenticados via Spring Security, e recebem notificações via WebSocket.
As notificações são recebidas via Kafka por meio da aplicação notification-api deste portifólio.
A rigor, é uma aplicação com arquitetura orientada a eventos, possui comunicação assíncrona real, um WebSocket stateless, e um Kafka desacoplado para transporte de mensagens. Além disso, possui um módulo interno de autenticação via JWT com Spring Security.
Como uma aplicação de portifólio, eu ressalto que algumas funcionalidades relativamente básicas não foram implementadas para concisão do processo de desenvolvimento. Dentre elas uma estrutura de Exceptions personalizada com um exception handler (exemplo) e uma estrutura de Roles específicas para diferentes usuários (eu pretendo desenvolver isso em estudos posteriores).
Outro ponto importante é o desenvolvimento de testes automatizados para o projeto, que ainda não foram implementados.
Além disso, acredito que algumas melhorias também seriam iminentes na evolução do projeto, como a separação do pacote de autenticação em um Microsserviço distinto, adicionar o ACK do cliente (confirmação de recebimento da mensagem) e o STOMP para o módulo de notificações.
- Certifique-se de ter as seguintes instalações efetuadas no seu sistema operacional:
- Docker
- Java 21
- Maven
- Kafka (preferencialmente via container)
- MongoDB (preferencialmente via container)
- Rodar o projeto via container:
- Crie o JAR da aplicação | Build the application JAR:
mvn clean package- Construa a imagem Docker | Build the Docker image (make sure to include the dot at the end):
docker build -t notification-api:latest .- Rode o container Docker | Run the Docker container:
docker run -p 8080:8080 notification-api:latest- Verifique a atividade da aplicação | Verify the application health:
curl --location 'localhost:8080/health/is-app-running'
The application is compiled on the host machine using Maven.
The Docker image only packages the generated JAR and runs it using a Java 17 runtime.
This application was developed and tested on Linux, but it should also work fine on Windows and macOS.
- Para verificação dos endpoints REST, importe a collection do postman que está na raíz do projeto
- Para conexão com o websocket, utilize a seguinte URL String no postman.
Certifique-se de logar na aplicação pela rota /auth/login com um usuário previamente cadastrado
ws://localhost:8080/ws/notificationsPara abrir uma conexão websocket no postman, selecione
New (Canto superior esquerdo) -> WebSocket
