Projeto em Java para controle de usuários, permississões e registro de acessos a setores, utilizando CSV como persistência e um script em JavaScript para geração de dados mock.
O sistema simula um controle de entrada e saída de usuários em setores, respeitando status do usuário, permissões, janelas de horário e mantendo um histórico completo de acessos.
AcessManager/
│
├── csv/ # Dados persistidos (gerados pelo script JS)
│ ├── usuarios.csv
│ ├── setores.csv
│ ├── permissoes.csv
│ └── acessos.csv
│
├── model/ # Entidades de domínio
│ ├── Usuario.java
│ ├── Setor.java
│ ├── Permissao.java
│ └── Acesso.java
│
├── service/ # Regras de negócio
│ ├── UsuarioService.java
│ └── AcessoService.java
│
├── mapper/ # Leitura de CSV → Objetos
│ ├── UsuarioCSVMapper.java
│ ├── SetorCSVMapper.java
│ ├── PermissaoCSVMapper.java
│ └── AcessoCSVMapper.java
│
├── repository/ # Escrita em CSV
│ ├── UsuarioRepository.java
│ └── AcessoRepository.java
│
├── enums/
│ └── Role.java
│
└── Main.java # Interface CLI
- Java 17+
- Node.js (apenas para gerar os CSVs de mock)
node GerarCSV.jsSerão gerados automaticamente:
- Usuários
- Setores
- Permissões
- Histórico de acessos
Todos os arquivos serão salvos na pasta csv/.
- Pode estar ativo ou inativo
- Possui um Role:
ADMINMANAGEREMPLOYEEVISITOR
- Apenas usuários ativos podem ter o acesso validado
- Representa uma área física ou lógica
- Pode possuir restrições de acesso
- É utilizado como base para validação de permissões
- Define se um usuário pode acessar um setor
- Possui uma janela de horário:
horario_iniciohorario_fim
- Representa uma tentativa de entrada
- Sempre registrada (permitida ou negada)
- Evita duplicidade de acessos abertos
criarUsuario(String nome, Role role)
buscarPorId(Long id)
listarUsuarios()
desativarUsuario(Long id)
reativarUsuario(Long id)
### 📌 AcessoService
```java
boolean validarEntrada(Long usuarioId, Long setorId)
void registrarSaida(Long usuarioId, Long setorId)
List<Acesso> getHistorico()
List<Acesso> getHistoricoPorUsuario(Long usuarioId)
List<Acesso> getHistoricoPorSetor(Long setorId)
- Usuário solicita entrada em um setor
- Sistema valida usuário, setor, permissão e horário
- Entrada registrada ou negada
- Saída atualiza o registro correto