- remove backend-old (Medusa), saveinmed-frontend (Next.js/Appwrite) and marketplace dirs - split Go usecases by domain and move notifications/payments to infrastructure - reorganize frontend pages into auth, dashboard and marketplace modules - add Makefile, docker-compose.yml and architecture docs
115 lines
3.9 KiB
Markdown
115 lines
3.9 KiB
Markdown
# SaveInMed — Backend API (Go)
|
|
|
|
Serviço principal do marketplace B2B farmacêutico. Implementa toda a lógica de negócio, persistência e integrações externas.
|
|
|
|
---
|
|
|
|
## Estrutura de diretórios
|
|
|
|
```
|
|
backend/
|
|
├── cmd/
|
|
│ ├── api/ ← entry-point principal (porta 8214)
|
|
│ ├── apply_migration/ ← runner de migrações DDL
|
|
│ ├── seeder/ ← seed de dados de produção
|
|
│ └── seed_lojista/ ← seed de conta lojista demo
|
|
├── docs/ ← Swagger/OpenAPI gerado (swag)
|
|
├── internal/
|
|
│ ├── domain/ ← tipos, entidades, value objects
|
|
│ ├── http/
|
|
│ │ ├── handler/ ← handlers HTTP (um arquivo por domínio)
|
|
│ │ └── middleware/ ← JWT, CORS, rate-limit
|
|
│ ├── infrastructure/
|
|
│ │ ├── mapbox/ ← cliente Mapbox (distância/rota)
|
|
│ │ ├── notifications/ ← e-mail, push (FCM)
|
|
│ │ └── payments/ ← adapters Mercado Pago / Asaas / Stripe
|
|
│ ├── repository/ ← interfaces + implementações PostgreSQL
|
|
│ ├── server/ ← bootstrap: router, middleware chain
|
|
│ └── usecase/ ← regras de negócio (Clean Architecture)
|
|
│ ├── usecase.go ← Repository interface, Service struct
|
|
│ ├── auth_usecase.go ← JWT, login, registro, reset de senha
|
|
│ ├── user_usecase.go ← CRUD de usuários
|
|
│ ├── company_usecase.go ← CRUD de empresas + KYC
|
|
│ ├── product_usecase.go ← catálogo, inventário, fabricantes
|
|
│ ├── cart_usecase.go ← carrinho B2B (descontos, taxas)
|
|
│ ├── order_usecase.go ← ciclo de pedido + máquina de estados
|
|
│ ├── payment_usecase.go ← preferências MP, webhook, ledger
|
|
│ ├── shipping_usecase.go ← cálculo de frete (Mapbox + haversine)
|
|
│ ├── review_usecase.go ← avaliações pós-entrega
|
|
│ ├── address_usecase.go ← endereços por usuário
|
|
│ └── dashboard_usecase.go ← métricas vendedor / admin
|
|
└── uploads/ ← artefatos enviados (git-keeped)
|
|
```
|
|
|
|
---
|
|
|
|
## Arquitetura (Clean Architecture)
|
|
|
|
```
|
|
HTTP Request
|
|
│
|
|
▼
|
|
Handler (internal/http/handler/)
|
|
│ converte HTTP → chamada de usecase
|
|
▼
|
|
Service (internal/usecase/)
|
|
│ regras de negócio puras
|
|
▼
|
|
Repository (internal/repository/)
|
|
│ interface satisfeita por implementação PostgreSQL
|
|
▼
|
|
PostgreSQL + Infra Adapters (payments / notifications / mapbox)
|
|
```
|
|
|
|
Cada camada depende **apenas da camada imediatamente abaixo** via interface — nenhuma dependência circular.
|
|
|
|
---
|
|
|
|
## Máquina de estados do pedido
|
|
|
|
```
|
|
Pending ──► Paid ──────► Invoiced ──► Shipped ──► Delivered ──► Completed
|
|
│ │ │ │
|
|
└──Cancel └──Cancel └──Cancel └──Cancel
|
|
(estoque restaurado automaticamente)
|
|
```
|
|
|
|
---
|
|
|
|
## Stack
|
|
|
|
| Componente | Tecnologia |
|
|
|------------|------------|
|
|
| Linguagem | Go 1.24+ |
|
|
| HTTP | net/http (chi) |
|
|
| Banco | PostgreSQL |
|
|
| Auth | JWT HS256 + bcrypt+pepper |
|
|
| Pagamentos | Mercado Pago · Asaas · Stripe |
|
|
| Frete | Mapbox Directions API + haversine fallback |
|
|
| Docs API | Swagger (swag) |
|
|
|
|
---
|
|
|
|
## Comandos essenciais
|
|
|
|
```bash
|
|
# rodar localmente
|
|
go run ./cmd/api
|
|
|
|
# gerar docs Swagger
|
|
swag init -g cmd/api/main.go -o docs/
|
|
|
|
# aplicar migrações
|
|
go run ./cmd/apply_migration
|
|
|
|
# testes
|
|
go test ./... -cover
|
|
|
|
# build + vet
|
|
go build ./... && go vet ./...
|
|
```
|
|
|
|
---
|
|
|
|
> Arquitetura completa: [docs/architecture.md](../docs/architecture.md)
|
|
> Pendências de negócio: [docs/PENDENCIAS_BACKEND.md](../docs/PENDENCIAS_BACKEND.md)
|