Skip to content

Repository files navigation

🌐 Sistema de Gestão de Tarefas Colaborativo – JungleOps

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.

Status


⚙️ Arquitetura do Sistema

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

🏗️ Diagrama de Arquitetura

Diagrama de Arquitetura


🚀 Tecnologias

Front End

  • Vite
  • React
  • TanStack Query
  • TanStack Router
  • TanStack Table
  • TypeScript
  • Axios
  • React Hook Form
  • Zod
  • Tailwind CSS
  • Radix UI
  • Sonner

Back End (Microservices)

  • NestJS
  • Express
  • TypeORM
  • PostgreSQL
  • JWT
  • Passport JWT
  • BCrypt
  • Swagger
  • Zod
  • TypeScript

Mensageria

  • RabbitMQ
  • Socket.IO

Infra, Orquestração

  • TurboRepo
  • Docker
  • Docker Compose
  • Nginx

🗂️ Divisão de responsabilidades

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)

👷🏻 Decisões técnicas e trade-offs

1. Monorepo com múltiplos serviços

  • Facilita compartilhamento de tipos e utilitários.
  • Trade-off: maior complexidade e atenção para configuração do Docker e build.

2. API Gateway como única porta de entrada

  • 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.

🚀 Instruções para rodar o projeto

  1. Clone o repositório e acesse o diretório do projeto:
git clone https://github.com/oliveiradniel/jungleops.git

cd jungleops
  1. Copiar as variáveis:
  • Antes de subir a infraestrutura certifique-se de copiar o arquivo .env.example para .env, pois o Docker Compose irá procurar especificamente neste arquivo.
cp .env.example .env
  1. 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
  1. Iniciar o ambiente:
docker compose up -d --build

⚠️ Se estiver com uma versão antiga do Docker precisará executar docker-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

Frontend | Swagger Docs

⚠️ Caso queira subir com o Nginx como gateway e única porta de entrada, basta executar o docker compose feito para tal propósito:

docker compose -f docker-compose.nginx.yml up -d

📄 Variáveis de Ambiente (Docker Compose)

O 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.


🔗 Links

Portfólio

About

Collaborative task management system built as a monorepo, featuring NestJS-based microservices, event-driven communication with RabbitMQ, and a modern React web application.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages