- 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
3.9 KiB
3.9 KiB
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
# 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 Pendências de negócio: docs/PENDENCIAS_BACKEND.md