ZenoTime é um sistema completo de gestão de folha de ponto desenvolvido como trabalho final do curso. O sistema permite que empresas gerenciem funcionários, projetos, times e sprints, com controle de ponto integrado e análise de produtividade através de dashboards avançados.
Empresas que precisam de controle de ponto integrado com gestão de projetos e análise de produtividade.
O sistema é composto por 3 serviços Spring Boot e um frontend React:
-
zenotime-core-service (Porta 8080)
- Serviço principal com todas as APIs REST
- Autenticação JWT
- CRUD de todas as entidades
- Produção de mensagens RabbitMQ
-
zenotime-report-service (Porta 8081)
- Consome mensagens de registros de ponto
- Gera relatórios CSV diários (agendado)
- Exportação de relatórios (PDF, Excel, CSV)
-
zenotime-notification-service (Porta 8082)
- Consome eventos críticos (solicitações, sprints)
- Alerta administradores sobre eventos que requerem atenção
- zenotime-frontend (Porta 3000)
- Interface React com Material-UI
- Dashboard administrativo com gráficos
- CRUD completo de todas as entidades
- Registro de ponto para funcionários
- Spring Boot 3.2.0
- Spring Data JPA
- Spring Security (JWT)
- Spring AMQP (RabbitMQ)
- MySQL 8.0
- Maven
- React 18
- React Router
- Axios
- Recharts (gráficos)
- Material-UI
- React Query
- Docker
- Docker Compose
- RabbitMQ
- MySQL
ZenoTime/
├── zenotime-core-service/ # Serviço principal
├── zenotime-report-service/ # Serviço de relatórios
├── zenotime-notification-service/ # Serviço de notificações
├── zenotime-frontend/ # Frontend React
├── docker-compose.yml # Orquestração dos serviços
└── README.md # Este arquivo
- Docker e Docker Compose instalados
- Maven (para build local, opcional)
- Node.js (para desenvolvimento do frontend, opcional)
- Clone o repositório:
git clone <url-do-repositorio>
cd ZenoTime- Execute o docker-compose:
docker-compose up -d-
Aguarde alguns segundos para todos os serviços iniciarem.
-
Acesse:
- Frontend: http://localhost:3000
- API Core: http://localhost:8080
- RabbitMQ Management: http://localhost:15672 (admin/admin)
- MySQL: localhost:3306 (zenotime/zenotime)
- Certifique-se de que MySQL e RabbitMQ estão rodando:
docker-compose up mysql rabbitmq -d- Entre em cada serviço e execute:
cd zenotime-core-service
mvn spring-boot:runcd zenotime-frontend
npm install
npm start- 8080: Core Service (API principal)
- 8081: Report Service
- 8082: Notification Service
- 3000: Frontend React
- 3306: MySQL
- 5672: RabbitMQ
- 15672: RabbitMQ Management UI
O sistema utiliza JWT para autenticação. Para fazer login:
- Acesse http://localhost:3000/login
- Use as credenciais:
- Email: admin@zenotime.com
- Senha: (criar usuário inicial via API ou banco)
Você pode criar um usuário inicial diretamente no banco de dados ou via API:
POST http://localhost:8080/api/usuarios
{
"nome": "Administrador",
"email": "admin@zenotime.com",
"senha": "senha123",
"tipo": "ADMINISTRADOR",
"ativo": true
}ponto.registrado: Quando funcionário registra entrada/saídasolicitacao.criada: Solicitações de férias/atestadosprint.criada: Nova sprint criadahoras.administrativas: Registro de horas administrativas
- Registro de Ponto →
ponto.registrado→ report-service (gera CSV diário) - Solicitação de Férias/Atestado →
solicitacao.criada→ notification-service (alerta admin) - Criação de Sprint →
sprint.criada→ notification-service (notifica times)
- Registro de ponto (entrada/saída)
- Visualização de registros pessoais
- Solicitação de férias e atestados
- Visualização de projetos e times atribuídos
- Dashboard analítico com gráficos:
- Produtividade ao longo do tempo
- Distribuição de horas por projeto
- Comparativo de produtividade entre times
- CRUD completo de:
- Empresas
- Projetos
- Times
- Sprints
- Funcionários
- Aprovação/rejeição de solicitações
- Exportação de relatórios (PDF, Excel, CSV)
- Usuario: Funcionários e administradores
- Empresa: Empresas clientes
- Projeto: Projetos dentro de empresas
- Time: Times dentro de projetos
- Sprint: Sprints de times
- RegistroPonto: Registros de entrada/saída
- Solicitacao: Solicitações de férias/atestados
- Funcionário ↔ Empresa (com datas de início/fim)
- Funcionário ↔ Projeto (com datas de início/fim)
- Funcionário ↔ Time (com datas de início/fim)
POST http://localhost:8080/api/auth/login
Content-Type: application/json
{
"email": "admin@zenotime.com",
"senha": "senha123"
}POST http://localhost:8080/api/ponto/entrada
Authorization: Bearer <token>
Content-Type: application/json
{
"dataHoraEntrada": "2024-01-15T08:00:00",
"projetoId": 1,
"observacoes": "Trabalhando no projeto X"
}POST /api/auth/login- Login
GET /api/usuarios- ListarPOST /api/usuarios- CriarPUT /api/usuarios/{id}- AtualizarDELETE /api/usuarios/{id}- Excluir
GET /api/empresas- ListarPOST /api/empresas- CriarPUT /api/empresas/{id}- AtualizarDELETE /api/empresas/{id}- Excluir
GET /api/projetos- ListarPOST /api/projetos- CriarPUT /api/projetos/{id}- AtualizarDELETE /api/projetos/{id}- Excluir
GET /api/times- ListarPOST /api/times- CriarPUT /api/times/{id}- AtualizarDELETE /api/times/{id}- Excluir
GET /api/sprints- ListarPOST /api/sprints- CriarPUT /api/sprints/{id}- AtualizarDELETE /api/sprints/{id}- Excluir
GET /api/ponto- Listar registros do funcionárioPOST /api/ponto/entrada- Registrar entradaPOST /api/ponto/saida/{registroId}- Registrar saída
GET /api/solicitacoes- ListarPOST /api/solicitacoes- Criar (Funcionário)PUT /api/solicitacoes/{id}/aprovar- Aprovar (Admin)PUT /api/solicitacoes/{id}/rejeitar- Rejeitar (Admin)
GET /api/relatorios/export?formato=csv|pdf|excel&periodo=...- Exportar
Para fazer build manual dos serviços:
# Core Service
cd zenotime-core-service
mvn clean package
docker build -t zenotime-core .
# Report Service
cd zenotime-report-service
mvn clean package
docker build -t zenotime-report .
# Notification Service
cd zenotime-notification-service
mvn clean package
docker build -t zenotime-notification .
# Frontend
cd zenotime-frontend
npm run build
docker build -t zenotime-frontend .As configurações podem ser ajustadas no docker-compose.yml ou nos arquivos application.yml de cada serviço.
O banco de dados é criado automaticamente na primeira execução. O schema é gerado via Hibernate (ddl-auto: update).
Cada serviço Spring Boot segue a arquitetura em camadas:
- Controller: Endpoints REST
- Service: Lógica de negócio
- Repository: Acesso a dados
- Entity: Entidades JPA
- DTO: Objetos de transferência
- Config: Configurações (RabbitMQ, Security, etc.)
- Verifique se as portas estão livres
- Verifique os logs:
docker-compose logs <servico>
- Aguarde alguns segundos para o MySQL inicializar completamente
- Verifique se o container do MySQL está rodando:
docker ps
- Verifique se o RabbitMQ está acessível: http://localhost:15672
- Credenciais padrão: admin/admin
Este projeto foi desenvolvido como trabalho acadêmico.
- João Vítor Monteiro (Desenvolvimento individual)
ZenoTime - Sistema de Folha de Ponto com Spring Boot, RabbitMQ e React