Integrantes
- RM 557323 - Carlos Eduardo Pacheco
- RM 558514 - Pedro Augusto Costa Ladeira
- RM 559213 - João Pedro Amorim
SmartLeader é uma plataforma (MVP) que combina inteligência artificial e gestão colaborativa para promover bem-estar e produtividade em equipes em modelo híbrido ou remoto. Este repositório contém a implementação do backend (Spring Boot), templates Thymeleaf para demonstração, integração com OpenAI (opcional), suporte a mensageria e cache.
Sumário rápido
- Visão geral e problema que resolvemos
- Benefícios e impacto
- Arquitetura e tecnologias usadas
- Como rodar localmente (passo-a-passo) — Windows (
cmd.exe) - Variáveis de ambiente e como habilitar integrações (OpenAI, Redis, RabbitMQ)
- Docker / Docker Compose
- Deploy em nuvem — instruções genéricas
- Endpoints principais (exemplos curl para
cmd.exe) - Migrações / scripts de banco
- Testes automatizados
- Checklist final de entrega e próximos passos
O SmartLeader ajuda gestores a distribuir tarefas de forma inteligente, equilibrando carga de trabalho, habilidades e bem-estar dos colaboradores. A solução:
- Coleta perfis (habilidades, histórico de tarefas)
- Analisa carga e disponibilidade
- Recomenda automaticamente o colaborador mais adequado para cada tarefa
- Gera justificativas/explicações (quando integradas com IA generativa)
- Oferece UI simples para demonstração (Thymeleaf) e API REST para integração
Problemas que o SmartLeader endereça
- Distribuição desigual de tarefas
- Falta de visibilidade sobre skills reais
- Risco de burnout por sobrecarga
- Demandas mal alocadas que reduzem produtividade
- Melhor balanceamento de carga entre colaboradores
- Aumento da eficiência ao alocar tarefas para quem tem skills adequadas
- Insights para gestores sobre gaps e sobrecarga
- Fluxo de recomendação transparente (fatores salvos e explicáveis)
- Backend: Spring Boot (Java 17)
- Persistência: Spring Data JPA (H2 para dev; suporte Oracle/Postgres/MySQL)
- Segurança: Spring Security + JWT
- Mensageria: RabbitMQ (opcional; app tem fallback quando Rabbit não disponível)
- Cache: Spring Cache (Simple em dev); suporte a Redis em produção
- IA generativa: integração com OpenAI via
OpenAIService(RestTemplate). Pode ser adaptado paraspring-ai. - Frontend demo: Thymeleaf (templates em
src/main/resources/templates) - Documentação API: springdoc OpenAPI (Swagger UI)
- Contêiner: Docker + Docker Compose
Pré-requisitos:
- Java 17
- Maven 3.8+
- (Opcional) Docker & Docker Compose — para RabbitMQ/Redis em dev
- Build do projeto
mvn -DskipTests package- Executar local (Spring Boot) — porta padrão: 8081
mvn spring-boot:run
REM ou
java -jar target/untitled-1.0-SNAPSHOT.jar- Páginas úteis
- Aplicação (UI demo): http://localhost:8081/
- H2 Console (dev): http://localhost:8081/h2-console
- JDBC URL:
jdbc:h2:mem:smartleaderdb - User:
sa(sem senha)
- JDBC URL:
- Swagger UI: http://localhost:8081/swagger-ui/index.html
Usuários de demonstração criados automaticamente (profile dev):
- Gestor:
gestor@demo/demo123 - Colaborador:
colaborador@demo/demo123
OPENAI_API_KEYou propriedadeopenai.api.key— chave da OpenAI (opcional).openai.enabled— força habilitação da integração OpenAI.app.jwt.secret(ouAPP_JWT_SECRET) — segredo HMAC para JWT.app.jwt.expiration-ms— expiração do token (ms).SPRING_DATASOURCE_URL,SPRING_DATASOURCE_USERNAME,SPRING_DATASOURCE_PASSWORD— credenciais do banco.SPRING_REDIS_HOST/spring.redis.host— host do Redis.SPRING_RABBITMQ_HOST,SPRING_RABBITMQ_USERNAME,SPRING_RABBITMQ_PASSWORD— RabbitMQ.
Exemplo no Windows (cmd.exe):
set OPENAI_API_KEY=sk_xxx...
set APP_JWT_SECRET=minha_senha_secreta
set SPRING_REDIS_HOST=localhost
set SPRING_RABBITMQ_HOST=localhostOpenAI
- Adicione
OPENAI_API_KEYou definaopenai.api.keyemapplication.properties. - Quando a chave não estiver presente, o sistema usa um fallback textual que ainda grava justificativas (campo
fatores).
Redis (cache)
- Exemplo para rodar Redis em Docker:
docker run -d --name smartleader-redis -p 6379:6379 redis:latest- Em seguida, ajuste
spring.redis.hostparalocalhost(ou use variáveis de ambiente).
RabbitMQ (mensageria)
- Exemplo para rodar RabbitMQ com management UI:
docker run -d --hostname rabbit --name smartleader-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management- A aplicação tem fallback quando
RabbitTemplatenão está disponível — portanto é seguro testar sem Rabbit.
Build da imagem local:
docker build -t smartleader:latest .Executar (com docker-compose quando existir configuração adequada):
docker-compose up --buildRodar apenas o container do app (exemplo):
docker run -p 8081:8081 -e APP_JWT_SECRET=minha_senha smartleader:latestOpção 1 — Docker Hub + Google Cloud Run (resumo):
docker build -t username/smartleader:latest .docker push username/smartleader:latest- No Cloud Run, crie serviço apontando para a imagem e configure variáveis de ambiente (DB, OPENAI_API_KEY, APP_JWT_SECRET, etc.).
Opção 2 — Heroku (container-based): consulte heroku container:push web e heroku container:release web.
Dicas para produção:
- Use banco gerenciado (Postgres/Oracle) e configure
spring.datasource.*. - Guarde segredos em vaults ou secrets do provedor.
- Ative Redis para cache e uma instância RabbitMQ gerenciada, se for preciso escalabilidade assíncrona.
- Login (gera JWT):
curl -s -X POST http://localhost:8081/api/auth/login -H "Content-Type: application/json" -d "{\"email\":\"gestor@demo\",\"password\":\"demo123\"}"Resposta: { "token": "<JWT>" }
- Recomendação síncrona (protegido):
curl -H "Authorization: Bearer <TOKEN>" "http://localhost:8081/api/recomendacao/colaborador?area=TI"- Solicitar recomendação assíncrona (enqueue):
curl -s -X POST http://localhost:8081/api/recomendacao/request -H "Content-Type: application/json" -d "{\"area\":\"TI\"}"- Obter fatores/explicação de uma recomendação:
curl -H "Authorization: Bearer <TOKEN>" http://localhost:8081/api/recomendacao/1/fatores- Listagem paginada (ex.: usuários):
curl http://localhost:8081/api/usuarios?page=0&size=10- Scripts para adicionar coluna
DS_FATORESem diferentes DBs estão emscripts/:add_ds_fatores_oracle.sql,add_ds_fatores_postgres.sql,add_ds_fatores_mysql.sql
- Migração Flyway também disponível em
src/main/resources/db/migration/V1__add_ds_fatores.sql. - Em H2 (dev),
spring.jpa.hibernate.ddl-auto=updatecria as colunas automaticamente.
Rodar todos os testes (unitários e de integração):
mvn testSe for usar Testcontainers (RabbitMQ/Redis), certifique-se de que Docker está disponível.
- Link do repositório GitHub com código fonte completo
- Links dos deploys em nuvem (URLs) e instruções de acesso (usuário/senha de teste ou instruções para gerar token)
- Vídeo Pitch (link YouTube ou equivalente)
- Vídeo demonstrando o software funcionando (≤ 10 minutos) — mostrar UI e chamadas de API com JWT
- Instruções para rodar localmente (este README serve como guia)
- Há atualmente dois
GlobalExceptionHandlerem pacotes diferentes. Recomendo unificar para um único handler (@RestControllerAdvice) com formato JSON consistente antes da entrega. - A integração com OpenAI foi feita via
RestTemplateemOpenAIService; se for requisito explícito usarspring-ai, podemos migrar. - Rodar
mvn teste corrigir quaisquer falhas antes de subir o repositório final.
Se quiser que eu:
- Unifique os handlers de exceção automaticamente e rode os testes, ou
- Gere instruções de deploy passo-a-passo para um provedor específico (ex.: Google Cloud Run),
- Gere um PDF formatado da proposta (a partir do texto anexado),
diga qual ação prefere que eu execute em seguida e eu aplico imediatamente.