4.3 KiB
4.3 KiB
Resumo da Migração: Portal Angular → React
✅ O que foi implementado:
1. Arquivos de Configuração
.env e .env.example
- Variáveis de ambiente extraídas do portal Angular
- URLs da API (principal e PIX)
- Configurações do Firebase
- Domínio padrão (@jurunense.com.br)
src/config/env.ts
- Configuração centralizada de variáveis de ambiente
- Acesso tipado às configurações
- Valores padrão caso variáveis não estejam definidas
2. Sistema de Autenticação
src/types/auth.ts
- Tipos TypeScript para autenticação
- Interfaces:
AuthUser,User,LoginResponse,ResultApi,AuthContextType
src/services/auth.service.ts
- Serviço completo de autenticação
- Métodos:
login(): Realiza login com processamento de email/senhaauthenticate(): Autenticação para autorizações especiaissaveToken()/getToken(): Gerenciamento de tokensaveUser()/getUser(): Gerenciamento de usuárioclearAuth(): Limpa dados de autenticaçãoisAuthenticated(): Verifica autenticaçãoisManager(): Verifica se é gerente (via JWT)getAuthHeaders(): Headers para requisições autenticadas
src/contexts/AuthContext.tsx
- Contexto React para estado global de autenticação
- Provider:
AuthProvider - Hook:
useAuth() - Funcionalidades:
- Estado de autenticação
- Login/Logout
- Acesso a dados do usuário
- Carregamento automático do localStorage
3. Integração com a Aplicação
index.tsx
- Envolvido com
AuthProviderpara disponibilizar contexto global
App.tsx
- Integrado com
useAuth() - Redirecionamento automático baseado em autenticação
- Uso de dados reais do usuário autenticado
views/LoginView.tsx
- Formulário de login funcional
- Integração com
useAuth() - Validação de campos
- Tratamento de erros
- Loading state
- Toggle de visibilidade de senha
🔄 Fluxo de Autenticação
- Usuário preenche email e senha no
LoginView - Email é processado (domínio adicionado, UPPERCASE)
- Senha é convertida para UPPERCASE
- Requisição POST para
/auth/login - Resposta contém token JWT e dados do usuário
- Dados são salvos no localStorage
- Context atualiza estado global
- App redireciona para menu principal
📋 Características Implementadas
Processamento de Credenciais
- ✅ Email: domínio
@jurunense.com.bradicionado automaticamente - ✅ Email e senha convertidos para UPPERCASE
- ✅ Validação mínima de senha (3 caracteres)
Armazenamento
- ✅ Token JWT no localStorage
- ✅ Dados do usuário no localStorage
- ✅ Limpeza de carrinho ao fazer login
Funcionalidades do Usuário
- ✅ Obter store, seller, supervisor, deliveryTime
- ✅ Verificar se é gerente (via JWT)
- ✅ Headers de autorização para requisições
🔧 Como Usar
1. Configurar Variáveis de Ambiente
Copie .env.example para .env e ajuste se necessário:
cp .env.example .env
2. Usar o Hook de Autenticação
import { useAuth } from './src/contexts/AuthContext';
function MyComponent() {
const {
user,
isAuthenticated,
isLoading,
login,
logout
} = useAuth();
// Seu código aqui
}
3. Fazer Requisições Autenticadas
import { authService } from './src/services/auth.service';
const headers = authService.getAuthHeaders();
const response = await fetch(`${API_URL}endpoint`, {
method: 'GET',
headers
});
📝 Próximos Passos Sugeridos
- Interceptors HTTP: Criar interceptor para adicionar token automaticamente
- Refresh Token: Implementar renovação automática de token
- Rotas Protegidas: Implementar proteção de rotas baseada em autenticação
- Tratamento de Expiração: Detectar e tratar expiração de token
- Testes: Adicionar testes unitários e de integração
⚠️ Notas Importantes
- O sistema mantém compatibilidade total com a API do portal Angular
- Token é armazenado no localStorage (considerar httpOnly cookies em produção)
- Todas as credenciais são enviadas em UPPERCASE (padrão do sistema)
- O arquivo
.envnão deve ser versionado
🔗 Compatibilidade
- ✅ Mesma API do portal Angular
- ✅ Mesmos endpoints de autenticação
- ✅ Mesmo formato de resposta
- ✅ Mesmo processamento de credenciais
- ✅ Mesmo armazenamento (localStorage)