saveinmed/frontend/README.md

89 lines
No EOL
2.6 KiB
Markdown

# 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 <token>`
- 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.