160 lines
4.1 KiB
Markdown
160 lines
4.1 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|