# SaveInMed — Monorepo > Marketplace B2B para o setor farmacêutico brasileiro. > Conecta distribuidoras, farmácias e operadores logísticos em uma plataforma única. --- ## Estrutura do repositório ``` saveinmed/ ├── backend/ # API principal (Go · Clean Architecture) ├── frontend/ # Marketplace web (React + Vite + Tailwind) ├── backoffice/ # API administrativa (NestJS · Prisma) ├── seeder-api/ # Seeder de catálogo de produtos ├── website/ # Site institucional └── docs/ # Documentação técnica centralizada ``` ### `backend/` API REST em Go seguindo Clean Architecture: - **`internal/domain/`** — modelos, regras e contratos de domínio - **`internal/usecase/`** — casos de uso por domínio (`company_usecase.go`, `order_usecase.go`, …) - **`internal/http/handler/`** — handlers HTTP (um arquivo por recurso) - **`internal/repository/postgres/`** — implementações de repositório + migrações SQL - **`internal/infrastructure/`** — integrações externas: `mapbox/`, `payments/`, `notifications/` - **`cmd/api/`** — entrypoint da API REST - **`cmd/seeder/`** — seed de dados ### `frontend/` Marketplace React com Vite. Páginas organizadas por perfil de usuário: - **`src/pages/auth/`** — Login, registro, recuperação de senha - **`src/pages/marketplace/`** — busca, carrinho, checkout, pedidos - **`src/pages/dashboard/admin/`** — painel admin (consome a API do `backoffice`) - **`src/pages/dashboard/seller/`** — painel do vendedor/distribuidora - **`src/pages/dashboard/employee/`** — painel do colaborador - **`src/pages/dashboard/delivery/`** — painel do entregador - **`src/components/`** — componentes reutilizáveis - **`src/stores/`** — Zustand (carrinho, filtros, UI global) - **`src/context/`** — Context API (auth + tema) - **`src/services/`** — clientes HTTP por domínio ### `backoffice/` API NestJS para operações administrativas internas: KYC, auditoria, disputas, relatórios, detecção de fraude. Conecta ao mesmo banco de dados do `backend` via Prisma. O painel React em `frontend/src/pages/dashboard/admin/` é o **frontend desta API**. --- ## Gerenciamento de estado (frontend) | Estado | Onde | Justificativa | |--------|------|---------------| | Autenticação (token JWT, user) | Context API (`AuthContext`) | Semântica de provider; mudanças raras | | Tema claro/escuro | Context API (`ThemeContext`) | Idem | | Carrinho de compras | Zustand (`cartStore`) | Atualizações frequentes; sem re-render do provider raiz | | Filtros de busca persistentes | Zustand / `usePersistentFilters` | Sobrevive a navegações | | Estado de UI local (modais, loaders) | `useState` local | Não precisa ser compartilhado | > **Regra:** Use Context apenas para auth/tema. Para estado de domínio ou UI global, use Zustand. --- ## Comandos úteis ```bash # Backend Go (porta 8214 por padrão) cd backend && go run ./cmd/api # Frontend marketplace cd frontend && pnpm dev # Backoffice API cd backoffice && pnpm start:dev # Aplicar migrações Go cd backend && go run ./cmd/apply_migration # Seed manual cd backend && go run ./cmd/seeder ``` Swagger disponível em `http://localhost:8214/swagger/index.html`. --- ## Convenções - **Commits semânticos:** `feat:`, `fix:`, `refactor:`, `docs:`, `chore:` - **Branches:** `main` = produção · `develop` = staging · `feature/*` = funcionalidades - **PRs:** obrigatório para `main` com ao menos 1 revisor --- ## Documentação técnica | Arquivo | Conteúdo | |---------|----------| | [docs/architecture.md](docs/architecture.md) | Visão geral da arquitetura e decisões de design | | [docs/BACKEND.md](docs/BACKEND.md) | Backend Go — detalhes, handlers, domínios | | [docs/BACKOFFICE.md](docs/BACKOFFICE.md) | NestJS backoffice — módulos e responsabilidades | | [docs/DATABASE.md](docs/DATABASE.md) | Modelo de dados e migrações | | [docs/ROADMAP.md](docs/ROADMAP.md) | Roadmap de produto | | [STATUS_REPORT_SAVEINMED.md](STATUS_REPORT_SAVEINMED.md) | Status detalhado de cada funcionalidade |