Vendaweb-portal/MIGRATION_SUMMARY.md

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/senha
    • authenticate(): Autenticação para autorizações especiais
    • saveToken() / getToken(): Gerenciamento de token
    • saveUser() / getUser(): Gerenciamento de usuário
    • clearAuth(): Limpa dados de autenticação
    • isAuthenticated(): Verifica autenticação
    • isManager(): 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 AuthProvider para 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

  1. Usuário preenche email e senha no LoginView
  2. Email é processado (domínio adicionado, UPPERCASE)
  3. Senha é convertida para UPPERCASE
  4. Requisição POST para /auth/login
  5. Resposta contém token JWT e dados do usuário
  6. Dados são salvos no localStorage
  7. Context atualiza estado global
  8. App redireciona para menu principal

📋 Características Implementadas

Processamento de Credenciais

  • Email: domínio @jurunense.com.br adicionado 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

  1. Interceptors HTTP: Criar interceptor para adicionar token automaticamente
  2. Refresh Token: Implementar renovação automática de token
  3. Rotas Protegidas: Implementar proteção de rotas baseada em autenticação
  4. Tratamento de Expiração: Detectar e tratar expiração de token
  5. 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 .env nã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)