feat: otimização de performance e ajustes finais

This commit is contained in:
Idrissa Banora
2026-05-18 10:49:32 +00:00
commit 52a7c4f9cf
579 changed files with 156489 additions and 0 deletions
@@ -0,0 +1,128 @@
# 👤 Usuário Admin Padrão - Criação Automática
## 📋 Descrição
O sistema cria automaticamente um usuário administrador padrão no banco de dados quando a aplicação é iniciada pela primeira vez.
## 🔧 Implementação
### Arquivo: `DataInitializer.java`
Localização: `sigefp-api/src/main/java/br/gov/sigefp/api/config/DataInitializer.java`
Este componente Spring Boot implementa `CommandLineRunner` e executa automaticamente após a inicialização da aplicação.
## ✅ O que é criado:
1. **Role ADMIN** (se não existir)
- Código: `ADMIN`
- Nome: `Administrador`
- Descrição: `Perfil de administrador com acesso total ao sistema`
2. **Usuário Admin** (se não existir)
- Username: `admin`
- Nome Completo: `Administrador do Sistema`
- Email: `admin@sigefp.gov.gw`
- Password: `admin123` (criptografado com BCrypt)
- Status: `Ativo`
- Role: `ADMIN` (associado automaticamente)
## 🔐 Credenciais Padrão
```
Username: admin
Password: admin123
```
**⚠️ IMPORTANTE**: Altere a senha após o primeiro login em ambiente de produção!
## 🗄️ Persistência no Banco de Dados
O usuário e a role são **persistidos no banco de dados PostgreSQL**, não são dados mock ou temporários.
### Tabelas Afetadas:
1. **`role`** - Armazena a role ADMIN
2. **`user_account`** - Armazena o usuário admin
3. **`user_role`** - Armazena a associação entre usuário e role
## 🔄 Comportamento
- **Primeira execução**: Cria role ADMIN e usuário admin
- **Execuções subsequentes**: Verifica se já existem e não cria duplicados
- **Logs**: Registra no console quando cria ou quando já existe
## 📝 Logs de Exemplo
```
INFO - Inicializando dados padrão...
INFO - Criando role ADMIN...
INFO - Criando usuário admin padrão...
INFO - Role ADMIN associada ao usuário admin.
INFO - Usuário admin criado com sucesso!
INFO - Username: admin
INFO - Password: admin123
INFO - Email: admin@sigefp.gov.gw
INFO - Inicialização de dados concluída.
```
Ou, se já existir:
```
INFO - Inicializando dados padrão...
INFO - Usuário admin já existe.
INFO - Inicialização de dados concluída.
```
## 🧪 Como Verificar
### Via SQL:
```sql
-- Verificar usuário admin
SELECT * FROM user_account WHERE username = 'admin';
-- Verificar role ADMIN
SELECT * FROM role WHERE code = 'ADMIN';
-- Verificar associação
SELECT ur.*, ua.username, r.code
FROM user_role ur
JOIN user_account ua ON ur.user_id = ua.id
JOIN role r ON ur.role_id = r.id
WHERE ua.username = 'admin';
```
### Via API:
```bash
# Fazer login
curl -X POST http://localhost:8081/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
# Listar usuários (requer autenticação)
curl -X GET http://localhost:8081/api/admin/users \
-H "Authorization: Bearer {token}"
```
## 🔒 Segurança
- A senha é **criptografada** usando BCrypt antes de ser armazenada
- O usuário só é criado se **não existir** (evita duplicação)
- A role só é criada se **não existir** (evita duplicação)
- A associação é verificada antes de criar (evita duplicação)
## 🚀 Uso
1. Inicie a aplicação Spring Boot
2. O `DataInitializer` executa automaticamente
3. Faça login com as credenciais padrão
4. Altere a senha após o primeiro login
---
**Status**: ✅ Implementado e funcional
**Tipo**: Dados reais no banco de dados (não mock)
**Última atualização**: Dezembro 2024