# Frontend - SaveInMed Marketplace React + Vite + TypeScript + Tailwind CSS ## Estado Atual - Fluxo ativo de autenticação: API direta via `VITE_API_URL` - Fluxo ativo não depende de BFF - Papéis suportados no frontend ativo: `admin`, `owner`, `employee`, `delivery` - `superadmin` e aliases antigos (`seller`, `colaborador`, `entregador`, `dono`) existem apenas como compatibilidade de legado ## Estrutura de `src/` ```text src/ |-- assets/ -> Logo, imagens estáticas |-- components/ -> Componentes reutilizáveis |-- context/ -> React Context (auth, tema) |-- hooks/ -> Custom hooks |-- layouts/ -> Layouts de página |-- pages/ -> Páginas organizadas por contexto e perfil | |-- auth/ -> Login | |-- marketplace/ -> Search, Cart, Checkout, Orders, OrderDetails | `-- dashboard/ | |-- admin/ -> Painel administrativo | |-- seller/ -> Área do `owner` (nome de pasta legado) | |-- employee/ -> Área do `employee` | |-- delivery/ -> Área do `delivery` | |-- Company.tsx | `-- MyProfile.tsx |-- services/ -> Clientes HTTP por domínio |-- stores/ -> Zustand (carrinho, filtros, UI global) |-- types/ -> Tipos TypeScript compartilhados `-- utils/ -> format, jwt, logger ``` ## Importações absolutas Utilize o alias `@/` (aponta para `src/`): ```tsx import { useAuth } from '@/context/AuthContext' ``` ## Gerenciamento de estado | Estado | Estratégia | |--------|-----------| | Auth (JWT, user) | Context API (`AuthContext`) + `apiClient` | | Tema claro/escuro | Context API (`ThemeContext`) | | Carrinho | Zustand (`cartStore`) | | Filtros de busca | Zustand / `usePersistentFilters` | | Estado UI local | `useState` no componente | > Regra: Context apenas para auth e tema. O restante fica em Zustand ou estado local. ## Scripts ```bash pnpm dev pnpm build pnpm test pnpm lint ``` ## Autenticação e API - O app Vite usa [src/services/apiClient.ts](./src/services/apiClient.ts) - O base URL do fluxo ativo vem de `VITE_API_URL` - Exemplo esperado: ```bash VITE_API_URL=https://api-dev.saveinmed.com.br ``` - O login ativo chama `POST /v1/auth/login` - O frontend injeta o token JWT em `Authorization: Bearer ` - Não usar `NEXT_PUBLIC_BFF_API_URL` para o app Vite ativo ## Roles suportadas - `admin` - `owner` - `employee` - `delivery` ## Observação sobre legado O repositório ainda contém páginas e serviços legados em `src/app/...` e stubs antigos. Esses arquivos não devem ser usados como referência de arquitetura nova sem revisão.