saveinmed/backend/README.md
caio-machado-dev bf85072bff chore: remove legacy services and restructure monorepo
- 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
2026-02-25 16:51:34 -03:00

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)