93 lines
No EOL
3.1 KiB
Markdown
93 lines
No EOL
3.1 KiB
Markdown
> 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. |