# 👤 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

