saveinmed/backend/internal/payments/mercadopago.go
Tiago Yamamoto 42f72f5f43 docs: adiciona documentação completa do projeto SaveInMed
- Cria README.md na raiz com visão global e diagrama de arquitetura
- Adiciona/atualiza README.md em todos os componentes:
  - backend (API Go)
  - backoffice (NestJS)
  - marketplace (React/Vite)
  - saveinmed-bff (Python/FastAPI)
  - saveinmed-frontend (Next.js)
  - website (Fresh/Deno)
- Atualiza .gitignore em todos os componentes com regras abrangentes
- Cria .gitignore na raiz do projeto
- Renomeia pastas para melhor organização:
  - backend-go → backend
  - backend-nest → backoffice
  - marketplace-front → marketplace
- Documenta arquitetura, tecnologias, setup e fluxo de desenvolvimento
2025-12-17 17:07:30 -03:00

44 lines
1.2 KiB
Go

package payments
import (
"context"
"fmt"
"time"
"github.com/saveinmed/backend-go/internal/domain"
)
// MercadoPagoGateway fakes the split configuration while keeping the API contract ready for the SDK.
type MercadoPagoGateway struct {
MarketplaceCommission float64
BaseURL string
}
func NewMercadoPagoGateway() *MercadoPagoGateway {
return &MercadoPagoGateway{
MarketplaceCommission: 2.5,
BaseURL: "https://api.mercadopago.com",
}
}
func (g *MercadoPagoGateway) CreatePreference(ctx context.Context, order *domain.Order) (*domain.PaymentPreference, error) {
select {
case <-ctx.Done():
return nil, ctx.Err()
default:
}
fee := int64(float64(order.TotalCents) * (g.MarketplaceCommission / 100))
pref := &domain.PaymentPreference{
OrderID: order.ID,
Gateway: "mercadopago",
CommissionPct: g.MarketplaceCommission,
MarketplaceFee: fee,
SellerReceivable: order.TotalCents - fee,
PaymentURL: fmt.Sprintf("%s/checkout/v1/redirect?order_id=%s", g.BaseURL, order.ID.String()),
}
// In a real gateway this is where the SDK call would run; we preserve latency budgets.
time.Sleep(10 * time.Millisecond)
return pref, nil
}