O ecossistema é composto por serviços desacoplados, com persistência em PostgreSQL, mensageria assíncrona via RabbitMQ e comunicação em tempo real por WebSockets. O frontend foi desenvolvido em React.js + Vite, e todo o ambiente é orquestrado com Docker Compose, garantindo padronização, escalabilidade e facilidade de deploy.
Este projeto adota uma arquitetura de microserviços em monorepo, construída com NestJS, utilizando um modelo de comunicação híbrido baseado em HTTP, RabbitMQ e WebSockets. A solução contempla autenticação centralizada com refresh token, gerenciamento completo de tarefas e comentários, além de um sistema de persistência de notificações e exibição em tempo real.
Com ele é possível:
- Criar, ver detalhes, atualizar e deletar tarefas
- Adicionar novos participantes à tarefas
- Adicionar comentários
- Ver auditoria detalhada de cada ação nas tarefas (criação, atualização e exclusão)
- Aplicar filtros à exibição de tarefas e auditoria
- Visualizar todas suas notificações das tarefas à qual participa
- Visualizar notificações e o que outros usuários fazem em tempo real
| Serviço (Microsserviço) | Responsabilidade Principal | Comunicação |
|---|---|---|
web |
Interface do Usuário (UI) e interação com o Gateway. | HTTP, WebSocket |
api-gateway |
Ponto de entrada HTTP/WebSocket. Autenticação/Guards, Rate Limiting, Documentação (Swagger). Roteamento para microsserviços. | HTTP/WebSocket |
auth-service |
Lógica de Autenticação: Cadastro, Login, Refresh de Token (JWT), Hash de Senha (bcrypt). | HTTP |
tasks-service |
Lógica de Negócio de Tarefas: CRUD, Comentários, Histórico, Atribuições. Publica eventos no RabbitMQ. | HTTP, RabbitMQ (Produtor) |
notifications-service |
Gerencia Notificações: Consome eventos do RabbitMQ, persiste e entrega via WebSocket. | RabbitMQ (Consumidor), WebSocket (Gateway) |
- Facilita compartilhamento de tipos e utilitários.
- Trade-off: maior complexidade e atenção para configuração do Docker e build.
- Centraliza autenticação.
- Permite aplicar políticas, guards e throttling em um ponto só.
- Trade-off: se ele cair toda aplicação para, um load balancer com múltiplas instâncias resolveria.
- Clone o repositório e acesse o diretório do projeto:
git clone https://github.com/oliveiradniel/jungleops.git
cd jungleops- Copiar as variáveis:
- Antes de subir a infraestrutura certifique-se de copiar o arquivo
.env.examplepara.env, pois o Docker Compose irá procurar especificamente neste arquivo.
cp .env.example .env- Build do monorepo / pacotes compartilhados
- O projeto depende do package shared, que contém tipos, entidades e enums usados por todos os microserviços. Antes de rodar qualquer serviço, é necessário compilá-lo:
# No root do repositório
npm install- Em seguida gere o build da pasta
shared:
cd packages/shared
npm run build- Iniciar o ambiente:
docker compose up -d --builddocker-compose up --build.
Isso sobe:
- Banco de Dados (Usuários, Tarefas e Comentários, Notificações)
- Servidor RabbitMQ
- Front-End
- API Gateway
- Auth Service
- Tasks Service
- Notifications Service
docker compose -f docker-compose.nginx.yml up -dO projeto utiliza um arquivo .env com as seguintes variáveis:
| Nome | Descrição | Exemplo |
|---|---|---|
RABBITMQ_USER |
Usuário para autenticação no RabbitMQ | admin |
RABBITMQ_PASS |
Senha do usuário do RabbitMQ | admin |
BROKER_URL |
URL de conexão com o RabbitMQ (protocolo AMQP) | amqp://admin:admin@rabbitmq:5672 |
JWT_ACCESS_SECRET |
Chave secreta para assinar tokens de acesso JWT | unsecure_jwt_secret_access |
JWT_REFRESH_SECRET |
Chave secreta para assinar tokens de refresh JWT | unsecure_jwt_secret_refresh |
FRONTEND_ORIGIN |
URL base do frontend, usada em CORS ou redirecionamentos | http://localhost:3000 |
AUTH_SERVICE_BASE_URL |
URL base do serviço de autenticação | http://auth-service:3002/auth |
USERS_SERVICE_BASE_URL |
URL base do serviço de usuários | http://auth-service:3002/users |
TASKS_SERVICE_BASE_URL |
URL base do serviço de tarefas | http://tasks-service:3003/tasks |
TASK_AUDIT_LOGS_SERVICE_BASE_URL |
URL base do serviço de audit logs | http://tasks-service:3003/task-audit-logs |
VITE_API_URL |
URL base da API | http://localhost:3001/api |
VITE_NOTIFICATIONS_WS_URL |
URL base do serviço de notificações | http://localhost:3004 |
| Banco de Usuários | ||
DB_AUTH_SERVICE_PASSWORD |
Senha do usuário do banco de dados PostgreSQL | authserviceroot |
DB_AUTH_SERVICE_USER |
Nome do usuário do banco de dados PostgreSQL | authserviceroot |
DB_AUTH_SERVICE_NAME |
Nome do banco de dados que será criado e usado pela aplicação | auth_service_db |
DB_AUTH_SERVICE_HOST |
Host do servidor PostgreSQL | auth_service_db |
DB_AUTH_SERVICE_PORT |
Porta de conexão com o PostgreSQL | 5432 |
| Banco de Notificações | ||
DB_NOTIFICATIONS_SERVICE_PASSWORD |
Senha do usuário do banco de dados PostgreSQL | notificationsserviceroot |
DB_NOTIFICATIONS_SERVICE_USER |
Nome do usuário do banco de dados PostgreSQL | notificationsserviceroot |
DB_NOTIFICATIONS_SERVICE_NAME |
Nome do banco de dados que será criado e usado pela aplicação | notifications_service_db |
DB_NOTIFICATIONS_SERVICE_HOST |
Host do servidor PostgreSQL | notifications_service_db |
DB_NOTIFICATIONS_SERVICE_PORT |
Porta de conexão com o PostgreSQL | 5432 |
| Banco de Tarefas e Comentários | ||
DB_TASKS_SERVICE_PASSWORD |
Senha do usuário do banco de dados PostgreSQL | tasksserviceroot |
DB_TASKS_SERVICE_USER |
Nome do usuário do banco de dados PostgreSQL | tasksserviceroot |
DB_TASKS_SERVICE_NAME |
Nome do banco de dados que será criado e usado pela aplicação | tasks_service_db |
DB_TASKS_SERVICE_HOST |
Host do servidor PostgreSQL | tasks_service_db |
DB_TASKS_SERVICE_PORT |
Porta de conexão com o PostgreSQL | 5432 |
⚠️ Lembre-se de usar secrets diferentes para a geração do Access e Refresh token JWT.
