89 lines
No EOL
2.6 KiB
Markdown
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. |