saveinmed/backend
2026-03-09 10:04:36 -03:00
..
.gocache feat: consolidate architecture, remove bff dependency and update backend/frontend modules 2026-03-07 06:40:42 -06:00
cmd fix: geocode tool repository interface cast 2026-03-09 09:27:32 -03:00
docs refactor: substitui backend Medusa por backend Go e corrige testes do marketplace 2026-02-17 04:56:37 -06:00
internal fix: resolve ghost syntax error in product_handler and stabilize backend 2026-03-09 10:04:36 -03:00
uploads/019c7c9c-f766-7618-b4f5-2fcdb863de38 feat(company): adiciona melhorias de geolocalização e documentos 2026-02-20 19:31:24 -03:00
.air.toml chore: add .air.toml and fix docker-compose paths for backend 2026-03-09 09:53:27 -03:00
.env fix: align dev auth and bootstrap superadmin 2026-03-04 10:41:40 -06:00
.env.example refactor: substitui backend Medusa por backend Go e corrige testes do marketplace 2026-02-17 04:56:37 -06:00
.env.template fix: align dev auth and bootstrap superadmin 2026-03-04 10:41:40 -06:00
.gitignore refactor: substitui backend Medusa por backend Go e corrige testes do marketplace 2026-02-17 04:56:37 -06:00
BACKEND.md fix: align dev auth and bootstrap superadmin 2026-03-04 10:41:40 -06:00
db_check_test.go refactor: substitui backend Medusa por backend Go e corrige testes do marketplace 2026-02-17 04:56:37 -06:00
Dockerfile refactor: substitui backend Medusa por backend Go e corrige testes do marketplace 2026-02-17 04:56:37 -06:00
DOMAIN.md chore: add AGENT.md 2026-03-07 18:45:58 -03:00
go.mod feat(ui): padronizar paleta #0F4C81 e estrutura em múltiplas telas 2026-02-26 15:56:03 -03:00
go.sum feat(ui): padronizar paleta #0F4C81 e estrutura em múltiplas telas 2026-02-26 15:56:03 -03:00
README.md chore: remove legacy services and restructure monorepo 2026-02-25 16:51:34 -03:00

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