# 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)