> Nota de atualização > > Este documento contém referências históricas a BFF, Appwrite ou papéis legados. No fluxo ativo do frontend, a referência correta é API direta e os papéis válidos são `admin`, `owner`, `employee` e `delivery`. # SaveInMed Marketplace Frontend ## Status (pronto x faltando) **Pronto** - Conteúdo descrito neste documento. **Faltando** - Confirmar no código o estado real das funcionalidades e atualizar esta seção conforme necessário. **Referencia atual** - Arquitetura vigente: [docs/arquitetura-atual.md](./docs/arquitetura-atual.md) --- Interface do usuário do marketplace B2B farmacêutico SaveInMed, desenvolvida com React e Vite. ## 🎯 Propósito Este é o frontend do marketplace SaveInMed, onde farmácias e distribuidoras podem: - Navegar e pesquisar produtos farmacêuticos - Adicionar produtos ao carrinho - Realizar pedidos e checkout - Gerenciar perfil e histórico de compras - Acompanhar status de pedidos - Processar pagamentos via Mercado Pago ## 🚀 Tecnologias - **React 18** - Biblioteca UI - **TypeScript** - Tipagem estática - **Vite 5** - Build tool e dev server ultra-rápido - **React Router DOM 6** - Roteamento - **TailwindCSS 3** - Framework CSS utility-first - **Zustand 4** - Gerenciamento de estado - **Axios** - Cliente HTTP - **Mercado Pago SDK React** - Integração de pagamentos - **React Window** - Virtualização de listas para performance ## 📋 Funcionalidades ### Catálogo de Produtos - Listagem de produtos com virtualização - Busca e filtros avançados - Detalhes de produtos - Informações de lote e validade ### Carrinho de Compras - Adicionar/remover produtos - Atualizar quantidades - Persistência local com Zustand - Cálculo automático de totais ### Checkout e Pagamentos - Fluxo de checkout simplificado - Integração com Mercado Pago - Múltiplas formas de pagamento - Confirmação de pedido ### Autenticação - Login de usuários - Rotas protegidas - Contexto de autenticação - Persistência de sessão ### Dashboard - Visão geral de pedidos - Histórico de compras - EstatÃÂÂsticas de uso ### Perfil - Gerenciamento de dados pessoais - Endereços de entrega - Preferências ## ðŸÂÂâ€â€ÃƒÂ¯Ã‚¸Â Arquitetura ``` marketplace/ ââ€Âωâ€Âۉâ€Â€ src/ ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ components/ ââ€Â‚ ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ ProtectedRoute.tsx # Componente de rota protegida ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ context/ ââ€Â‚ ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ AuthContext.tsx # Contexto de autenticação ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ hooks/ ââ€Â‚ ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ usePersistentFilters.ts # Hook para filtros persistentes ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ layouts/ ââ€Â‚ ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ Shell.tsx # Layout principal ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ pages/ ââ€Â‚ ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ Cart.tsx # Página do carrinho ââ€Â‚ ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ Checkout.tsx # Página de checkout ââ€Â‚ ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ Company.tsx # Perfil da empresa [NEW] ââ€Â‚ ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ Dashboard.tsx # Dashboard do usuário ââ€Â‚ ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ Inventory.tsx # Gestão de estoque [NEW] ââ€Â‚ ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ Login.tsx # Página de login ââ€Â‚ ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ Orders.tsx # Pedidos [NEW] ââ€Â‚ ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ Profile.tsx # Página de perfil ââ€Â‚ ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ SellerDashboard.tsx # Dashboard vendedor [NEW] ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ services/ ââ€Â‚ ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ apiClient.ts # Cliente API configurado ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ stores/ ââ€Â‚ ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ cartStore.ts # Store Zustand do carrinho ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ test/ ââ€Â‚ ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ setup.ts # Setup Vitest ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ types/ ââ€Â‚ ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ product.ts # Tipos TypeScript ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ App.tsx # Componente raiz ââ€Â‚ ââ€Âωâ€Âۉâ€Â€ main.tsx # Entry point ââ€Â‚ ââ€Ââ€Âââ€Âۉâ€Â€ index.css # Estilos globais ââ€Âωâ€Âۉâ€Â€ index.html ââ€Âωâ€Âۉâ€Â€ vite.config.ts ââ€Âωâ€Âۉâ€Â€ vitest.config.ts # Config de testes ââ€Âωâ€Âۉâ€Â€ tailwind.config.ts ââ€Âωâ€Âۉâ€Â€ tsconfig.json ââ€Ââ€Âââ€Âۉâ€Â€ README.md ``` ## 🎨 Assets Os arquivos de assets estão em `src/assets/`: | Arquivo | Descrição | |---------|-----------| | `logo.png` | Logo oficial SaveInMed | ### Cores da Marca (Tailwind) ```typescript // tailwind.config.ts colors: { healthGreen: '#2D9CDB', // Azul claro medicalBlue: '#0F4C81' // Azul escuro (cor principal) } ``` ## 🧪 Testes O projeto utiliza **Vitest** para testes unitários: ```bash # Executar testes npm test # Executar testes com coverage npm run test:coverage # Executar testes uma vez (CI) npm test -- --run ``` ### Cobertura Atual | Categoria | Testes | |-----------|--------| | `cartStore` | 15 ✅ | | `apiClient` | 7 ✅ | | `usePersistentFilters` | 5 ✅ | | **Total** | **27** ✅ | ## ðŸâ€Â§ Configuração ### Variáveis de Ambiente Crie um arquivo `.env` na raiz do projeto: ```bash # API Backend VITE_API_URL=http://localhost:8080 # Mercado Pago VITE_MERCADOPAGO_PUBLIC_KEY=your-public-key-here # Ambiente VITE_ENV=development ``` ### Pré-requisitos - Node.js 20+ - npm ou yarn ## ðŸÂÂÆ’ Execução Local ```bash # Instalar dependências npm install # Modo desenvolvimento npm run dev # Aplicação estará disponÃÂÂvel em http://localhost:5173 ``` ## ðŸÂÂâ€â€ÃƒÂ¯Ã‚¸Â Build e Produção ```bash # Build para produção npm run build # Preview do build npm run preview # Arquivos de produção estarão em ./dist ``` ## 🎨 Estilização O projeto utiliza TailwindCSS para estilização. Principais recursos: - **Utility-first**: Classes utilitárias para estilização rápida - **Responsivo**: Design mobile-first - **Dark mode**: Suporte a tema escuro (se implementado) - **Customização**: Configuração em `tailwind.config.ts` ### Exemplo de Componente ```tsx export function ProductCard({ product }: { product: Product }) { return (
{product.description}