| .. | ||
| docs | ||
| e2e | ||
| public | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| COMO_ADICIONAR_ENTREGADOR_APPWRITE.md | ||
| CONFIGURACAO_COLLECTION_EMPRESAS_DADOS.md | ||
| CONFIGURACAO_COLLECTION_USUARIOS.md | ||
| CONFIGURACAO_COLLECTION_USUARIOS_DATA.md | ||
| CONFIGURACAO_COLLECTIONS_APPWRITE.md | ||
| CORRECAO_FORMULARIO_EDICAO_PRODUTOS.md | ||
| CORRECAO_MODAL_DETALHES_PRODUTO.md | ||
| deno.lock | ||
| DIAGNOSTICO_ERROS_COLLECTIONS.md | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| IMPLEMENTACAO_COMPLETA_MAPEAMENTO.md | ||
| IMPLEMENTACAO_DASHBOARD_DADOS_REAIS.md | ||
| IMPLEMENTACAO_MERCADOPAGO_CHECKOUT.md | ||
| IMPLEMENTACAO_MODAL_EDICAO_PRODUTOS.md | ||
| IMPLEMENTACAO_PAGAMENTOS_CHECKOUT.md | ||
| index.html | ||
| INTEGRACAO_PAGAMENTO_SUCESSO_MERCADOPAGO.md | ||
| MARKETPLACE.md | ||
| MELHORIAS_AUTENTICACAO_AUTH_APPWRITE.md | ||
| MELHORIAS_GESTAO_CATALOGO_PRODUTOS.md | ||
| MELHORIAS_MODAL_EDICAO_PRODUTOS.md | ||
| next-env.d.ts | ||
| next.config.ts | ||
| OTIMIZACOES_PERFORMANCE_DASHBOARD.md | ||
| package-lock.json | ||
| package.json | ||
| PERMISSOES_COLLECTION_USUARIOS.md | ||
| playwright.config.ts | ||
| pnpm-lock.yaml | ||
| postcss.config.cjs | ||
| postcss.config.mjs | ||
| PRODUTOS_CATALOGO_IMPLEMENTACAO.md | ||
| README.md | ||
| route.ts | ||
| SOLUCAO_ERROS_REGISTRO.md | ||
| tailwind.config.ts | ||
| test-carrinho.js | ||
| test-completar-registro.js | ||
| test-pedido.js | ||
| tsc-errors.txt | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
| vitest.config.ts | ||
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 superadmine aliases antigos (seller,colaborador,entregador,dono) existem apenas como compatibilidade de legado
Estrutura de src/
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/):
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
pnpm dev
pnpm build
pnpm test
pnpm lint
Autenticação e API
- O app Vite usa src/services/apiClient.ts
- O base URL do fluxo ativo vem de
VITE_API_URL - Exemplo esperado:
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 <token> - Não usar
NEXT_PUBLIC_BFF_API_URLpara o app Vite ativo
Roles suportadas
adminowneremployeedelivery
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.