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