saveinmed/backend
2025-12-18 12:43:51 -03:00
..
cmd/api docs: adiciona documentação completa do projeto SaveInMed 2025-12-17 17:07:30 -03:00
docs Add Gemini prompt guide for migrations and auth 2025-12-18 11:24:30 -03:00
internal Add inventory and cart endpoints 2025-12-18 12:43:51 -03:00
.env.example feat(backend): add root endpoint and update port to 8214 2025-12-18 10:37:46 -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 docs: adiciona documentação completa do projeto SaveInMed 2025-12-17 17:07: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 docs: adiciona documentação completa do projeto SaveInMed 2025-12-17 17:07:30 -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
│   ├── domain/               # Modelos de domínio
│   ├── http/
│   │   ├── handler/          # Handlers HTTP
│   │   └── middleware/       # Middlewares (logging, compress)
│   ├── payments/             # Integração Mercado Pago
│   ├── repository/
│   │   └── postgres/         # Repositório PostgreSQL
│   ├── server/               # Configuração do servidor
│   └── usecase/              # Casos de uso / lógica de negócio
├── docs/                     # Documentação Swagger
├── Dockerfile
└── README.md

🔧 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/swagger/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/swagger/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