# Solução para Erros de CORS e Integração Frontend-Backend

## Problema Identificado

Os erros mostrados no console do navegador são:
1. `GET http://localhost:3333/api/auth/me 404 (Not Found)` 
2. Erros de Content Security Policy (CSP)

## Análise

### ✅ CORS está configurado corretamente
- Headers de CORS sendo retornados: `access-control-allow-origin: http://localhost:4200`
- Métodos permitidos: GET, HEAD, POST, PUT, PATCH, DELETE
- Credentials habilitadas: `access-control-allow-credentials: true`

### ⚠️ Problema Real
O erro 404 em `/api/auth/me` ocorre porque:
1. O frontend está tentando verificar o usuário autenticado ao carregar
2. Não há token válido armazenado no localStorage
3. O interceptor de autenticação está redirecionando para login

## Solução

### 1. Limpar localStorage do Frontend

Abra o console do navegador (F12) e execute:
```javascript
localStorage.clear()
```

Depois recarregue a página (F5).

### 2. Fazer Login Primeiro

Antes de acessar qualquer página protegida:

1. Acesse: http://localhost:4200/login
2. Use as credenciais:
   - **Email:** `test@example.com`
   - **Senha:** `test123`
   
   Ou se os seeders foram executados:
   - **Email:** `admin@sigia.com`
   - **Senha:** `admin123`

3. Após login bem-sucedido, o token será armazenado e você poderá navegar

### 3. Verificar se Backend está Rodando

```bash
curl http://localhost:3333/
# Deve retornar: {"status":"ok","message":"SIGIA API is running"}
```

### 4. Testar Login Manualmente

```bash
curl -X POST http://localhost:3333/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"test@example.com","password":"test123"}'
```

Deve retornar um token JWT.

## Fluxo de Autenticação Correto

1. **Usuário acessa o frontend** → Não tem token → Redirecionado para /login
2. **Usuário faz login** → Backend retorna token → Token salvo no localStorage
3. **Interceptor adiciona token** → Todas as requisições incluem `Authorization: Bearer <token>`
4. **Backend valida token** → Retorna dados ou 401 se inválido
5. **Se 401** → Interceptor limpa localStorage → Redireciona para /login

## Verificar Configuração do Frontend

### Environment (src/environments/environment.ts)
```typescript
export const environment = {
  production: false,
  apiUrl: 'http://localhost:3333/api'
};
```

### AuthService deve:
1. Armazenar token no localStorage após login
2. Incluir token em todas as requisições via interceptor
3. Limpar token ao fazer logout ou receber 401

## Testes de Integração

### Teste 1: Health Check
```bash
curl http://localhost:3333/
```
✅ Deve retornar: `{"status":"ok"}`

### Teste 2: Login
```bash
curl -X POST http://localhost:3333/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"test@example.com","password":"test123"}'
```
✅ Deve retornar token

### Teste 3: Endpoint Protegido
```bash
TOKEN="<seu_token_aqui>"
curl http://localhost:3333/api/auth/me \
  -H "Authorization: Bearer $TOKEN"
```
✅ Deve retornar dados do usuário

### Teste 4: CORS
```bash
curl -X OPTIONS http://localhost:3333/api/auth/login \
  -H "Origin: http://localhost:4200" \
  -H "Access-Control-Request-Method: POST" -v
```
✅ Deve retornar headers de CORS

## Erros Comuns e Soluções

### Erro: "Cannot GET /docs"
**Causa:** Swagger UI precisa de assets estáticos
**Solução:** Acesse http://localhost:3333/docs - deve funcionar agora

### Erro: "401 Unauthorized"
**Causa:** Token inválido ou expirado
**Solução:** Faça login novamente

### Erro: "CORS policy"
**Causa:** Frontend rodando em porta diferente
**Solução:** Verifique se frontend está em http://localhost:4200

### Erro: "Network Error"
**Causa:** Backend não está rodando
**Solução:** Execute `npm run dev` no diretório sigia-api

## Checklist de Verificação

- [ ] Backend rodando em http://localhost:3333
- [ ] Frontend rodando em http://localhost:4200
- [ ] localStorage limpo (execute `localStorage.clear()` no console)
- [ ] Usuário criado no banco (via registro ou seeders)
- [ ] Login realizado com sucesso
- [ ] Token armazenado no localStorage
- [ ] Requisições incluindo header Authorization

## Próximos Passos

1. Limpe o localStorage
2. Acesse http://localhost:4200/login
3. Faça login com credenciais válidas
4. Navegue pela aplicação

Se ainda houver erros, verifique o console do navegador e os logs do backend para mais detalhes.
