O Gerenciador de Projetos é um sistema de gerenciamento de projetos desenvolvido com Spring Boot para o backend e React/Next.js para o frontend. Ele fornece uma plataforma para criar e gerenciar projetos, tarefas e colaboração em equipe, utilizando uma arquitetura orientada a eventos para melhor escalabilidade e resiliência.
Desenvolvido como projeto para o bloco "Engenharia de Softwares Escaláveis" da graduação em Engenharia da Computação - Instituto Infnet.
- Autenticação e autorização de usuários
- Criação e gerenciamento de projetos
- Atribuição e acompanhamento de tarefas
- Gerenciamento de membros da equipe
- Funcionalidade de chat em tempo real
- Criação e gerenciamento assíncrono de notas para projetos e tarefas
- Acompanhamento de progresso e geração de relatórios
- Gerenciamento de perfil de usuário
- Design responsivo para uso em desktop e dispositivos móveis
- Java 21
- Spring Boot 3.2.6
- Spring Security
- Spring Data JPA
- MySQL
- JWT para autenticação
- Spring Cloud para microsserviços
- RabbitMQ para mensageria
- Spring AMQP para integração com RabbitMQ
- React 18
- Next.js 14
- TypeScript
- Tailwind CSS
- Componentes UI Shadcn
- Docker
- Docker Compose
O projeto utiliza uma arquitetura de microsserviços orientada a eventos:
- Serviço Principal: Gerencia projetos, tarefas e usuários
- NoteService: Microsserviço dedicado ao gerenciamento de notas
- EurekaServer: Servidor de descoberta de serviços
- RabbitMQ: Message broker para comunicação assíncrona entre serviços
- Docker
- Docker Compose
-
Clone o repositório:
git clone https://github.com/seu-usuario/project-manager.git cd project-manager -
Construa e inicie os containers:
docker-compose up --build
Este comando irá construir as imagens Docker para todos os serviços e iniciá-los.
-
Acesse a aplicação: Abra o navegador e acesse
http://localhost:3000para utilizar a aplicação.
Para parar todos os serviços:
docker-compose downsrc/main/java/com/klug/projectmanager/config/: Classes de configuração, incluindo RabbitMQConfigcontroller/: Controladores da API RESTdto/: Objetos de Transferência de Dadosentity/: Entidades JPAexception/: Exceções personalizadas e manipuladoresrepository/: Repositórios JPAsecurity/: Configurações de segurança e utilitários JWTservice/: Serviços de lógica de negóciosmessaging/: Classes relacionadas à comunicação via RabbitMQ
src/main/java/com/klug/noteservice/config/: Configurações, incluindo RabbitMQConfigdto/: DTOs para notasentity/: Entidade Noterepository/: Repositório para notasservice/: Serviço de lógica de negócios para notasmessaging/: Handlers para processamento de mensagens RabbitMQ
src/app/: Páginas e roteamento do Next.jscomponents/: Componentes Reacthooks/: Hooks React personalizadoslib/: Funções utilitáriasservices/: Funções de serviço da API
O sistema utiliza uma arquitetura orientada a eventos para comunicação entre o serviço principal e o microsserviço de notas:
- Eventos são publicados no RabbitMQ quando ocorrem ações relacionadas a notas (criação, atualização, exclusão).
- O microsserviço de notas consome esses eventos e realiza as operações correspondentes.
- Respostas são enviadas de volta ao serviço principal através do RabbitMQ.
Esta arquitetura proporciona melhor escalabilidade, desacoplamento entre serviços e processamento assíncrono de operações.
Para desenvolvimento local sem Docker:
- Certifique-se de ter Java 21, Maven, Node.js, MySQL e RabbitMQ instalados.
- Configure o banco de dados e o RabbitMQ conforme descrito nos arquivos de configuração.
- Execute cada serviço separadamente (EurekaServer, NoteService, backend principal).
- Execute o frontend com
npm run dev.
- Instale e inicie o RabbitMQ em sua máquina local ou use um serviço em nuvem.
- Certifique-se de que o RabbitMQ está rodando na porta padrão (5672).
-
Navegue até o diretório do backend:
cd backend -
Configure o banco de dados MySQL e o RabbitMQ:
- Atualize o arquivo
application.propertiescom as credenciais do banco de dados e do RabbitMQ:
spring.datasource.url=jdbc:mysql://localhost:3306/seu_banco_de_dados spring.datasource.username=seu_usuario spring.datasource.password=sua_senha spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest
- Atualize o arquivo
-
Execute o EurekaServer:
cd ../eureka-server mvn spring-boot:run -
Execute o NoteService:
cd ../note-service mvn spring-boot:run -
Compile e execute o backend:
mvn spring-boot:run
-
Navegue até o diretório do frontend:
cd frontend -
Instale as dependências:
npm install
-
Inicie o servidor frontend:
npm run dev
Após configurar o backend, os microsserviços e o frontend, abra o navegador e acesse http://localhost:3000 para utilizar a aplicação.