saveinmed/backend
Tiago Yamamoto a0720fb4a6 refactor(handler): complete package decomposition - 92% extracted
Final handler package structure (9 files):
- handler.go: 111 lines (Auth: Register, Login)
- dto.go: 220 lines (DTOs, helpers)
- company_handler.go: 228 lines (Companies CRUD)
- product_handler.go: 216 lines (Products + Inventory)
- order_handler.go: 147 lines (Orders CRUD)
- cart_handler.go: 127 lines (Cart + Reviews)
- payment_handler.go: 117 lines (Payments + Shipments)
- dashboard_handler.go: 81 lines (Seller/Admin dashboards)
- user_handler.go: 256 lines (Users CRUD)

Total: 1471 -> 111 lines in handler.go (~92% extracted)
All tests passing
2025-12-20 08:10:56 -03:00
..
cmd/api Add auth docs, user CRUD, and password pepper 2025-12-19 17:54:16 -03:00
docs fix: resolve swagger duplicates and add backend tests 2025-12-19 20:28:39 -03:00
internal refactor(handler): complete package decomposition - 92% extracted 2025-12-20 08:10:56 -03:00
.env.example feat(backend): add configurable CORS and optimize Dockerfile 2025-12-19 17:34:30 -03:00
.gitignore docs: adiciona documentação completa do projeto SaveInMed 2025-12-17 17:07:30 -03:00
api feat: add automated db tests and update env examples 2025-12-18 08:13:19 -03:00
Dockerfile feat(backend): add configurable CORS and optimize Dockerfile 2025-12-19 17:34:30 -03:00
go.mod Implement JWT auth and company verification 2025-12-18 12:29:51 -03:00
go.sum Implement JWT auth and company verification 2025-12-18 12:29:51 -03:00
README.md refactor(handler): extract company handlers + update READMEs 2025-12-20 07:58:37 -03:00

SaveInMed API (Backend Go)

API de alta performance em Go 1.24 para o marketplace farmacêutico B2B SaveInMed.

🎯 Propósito

Este é o núcleo de performance do SaveInMed, responsável por operações críticas que exigem alta velocidade e eficiência, incluindo:

  • Gestão de empresas (farmácias, distribuidoras, administradores)
  • Catálogo de produtos com controle de lote e validade
  • Processamento de pedidos
  • Integração com Mercado Pago para pagamentos

🚀 Tecnologias

  • Go 1.24.3 - Linguagem de programação
  • PostgreSQL - Banco de dados (via pgx/v5)
  • json-iterator - Serialização JSON de alta performance
  • Swagger - Documentação automática da API
  • Gzip - Compressão de respostas

📋 Funcionalidades

Gestão de Empresas

  • Separação de papéis: farmácia, distribuidora, administrador
  • CRUD completo de empresas
  • Validação de CNPJ

Catálogo de Produtos

  • Produtos com lote e validade obrigatórios
  • Categorização e subcategorização
  • Controle de estoque

Pedidos

  • Ciclo completo: Pendente → Pago → Faturado → Entregue
  • Rastreamento de status
  • Histórico de transações

Pagamentos

  • Geração de preferência de pagamento Mercado Pago
  • Split de pagamento automático
  • Retenção de comissão da plataforma

🏗️ Arquitetura

backend/
├── cmd/
│   └── api/
│       └── main.go               # Entry point da aplicação
├── internal/
│   ├── config/                   # Configurações (100% coverage)
│   ├── domain/                   # Modelos de domínio
│   ├── http/
│   │   ├── handler/              # Handlers HTTP (refatorado)
│   │   │   ├── handler.go        # Auth, Products, Orders, etc
│   │   │   ├── company_handler.go # CRUD de empresas
│   │   │   └── dto.go            # DTOs e funções utilitárias
│   │   └── middleware/           # Middlewares (95.9% coverage)
│   ├── payments/                 # Integração MercadoPago (100% coverage)
│   ├── repository/
│   │   └── postgres/             # Repositório PostgreSQL
│   ├── server/                   # Configuração do servidor (74.7% coverage)
│   └── usecase/                  # Casos de uso (64.7% coverage)
├── docs/                         # Documentação Swagger
├── Dockerfile
└── README.md

🧪 Cobertura de Testes

Pacote Cobertura
config 100%
middleware 95.9%
payments 100%
usecase 64.7%
server 74.7%
handler 6.6%

🔧 Configuração

Variáveis de Ambiente

DATABASE_URL=postgres://user:password@localhost:5432/saveinmed?sslmode=disable
PORT=8080

Pré-requisitos

  • Go 1.24 ou superior
  • PostgreSQL 14+
  • Swag CLI (para regenerar documentação)

🏃 Execução Local

# Configurar variável de ambiente
export DATABASE_URL=postgres://postgres:postgres@localhost:5432/saveinmed?sslmode=disable

# Instalar dependências
go mod download

# Executar API
go run ./cmd/api

# API estará disponível em http://localhost:8080
# Swagger UI em http://localhost:8080/docs/index.html

🐳 Docker

# Build da imagem
docker build -t saveinmed-api:latest .

# Executar container
docker run -p 8080:8080 \
  -e DATABASE_URL=postgres://user:password@host:5432/saveinmed \
  saveinmed-api:latest

📚 Documentação da API

A documentação completa da API está disponível via Swagger UI:

http://localhost:8080/docs/index.html

Regenerar Swagger

# Instalar swag
go install github.com/swaggo/swag/cmd/swag@latest

# Gerar documentação
swag init --dir ./cmd/api,./internal/http/handler,./internal/domain \
  --output ./docs \
  --parseDependency \
  --parseInternal

🧪 Testes

# Executar todos os testes
go test ./...

# Executar testes com coverage
go test -cover ./...

# Gerar relatório de coverage
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out

📊 Performance

Esta API foi otimizada para alta performance:

  • json-iterator: ~2-3x mais rápido que encoding/json padrão
  • Compressão gzip: Reduz tamanho das respostas em ~70%
  • Connection pooling: Gerenciamento eficiente de conexões com PostgreSQL
  • Prepared statements: Queries otimizadas e protegidas contra SQL injection

🔗 Integração com Outros Componentes

  • Backoffice (NestJS): Compartilha o mesmo banco de dados PostgreSQL
  • Marketplace Frontend: Consome esta API para operações críticas
  • SaveInMed BFF: Pode fazer proxy para endpoints específicos desta API

📝 Licença

MIT