saveinmed/frontend/README.md
2026-03-07 07:04:27 -06:00

93 lines
No EOL
3.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

> 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`.
# 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
- Documento canonico da arquitetura atual: [docs/arquitetura-atual.md](./docs/arquitetura-atual.md)
## 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.