API REST para consulta de resultados das loterias da Caixa Econômica Federal
🌐 API em Produção | 📚 Documentação Swagger
Documentação • Instalação • Uso • API Endpoints • Contribuir
Não quer instalar nada? Use a API diretamente em produção:
# Listar todas as loterias
curl https://api-loterias.moleniuk.com/api
# Resultado mais recente da Mega-Sena
curl https://api-loterias.moleniuk.com/api/megasena/latest
# Documentação interativa
https://api-loterias.moleniuk.com/swagger/index.htmlA Loterias API Golang é uma API REST desenvolvida em Go que fornece acesso programático aos resultados históricos e atuais das principais loterias da Caixa Econômica Federal. O projeto inclui:
- ✅ Consulta de resultados de 10 loterias diferentes
- ✅ Atualização automática via scheduler (cron jobs)
- ✅ Persistência de dados com MongoDB
- ✅ Documentação interativa com Swagger
- ✅ Suporte a Docker e Docker Compose
- ✅ API RESTful com padrões modernos
- ✅ CORS configurado para integração frontend
| Loteria | ID | Descrição |
|---|---|---|
| Mega-Sena | megasena |
A loteria mais popular do Brasil |
| Lotofácil | lotofacil |
Facilita com 25 números |
| Quina | quina |
Sorteios diários |
| Lotomania | lotomania |
50 números para escolher |
| Timemania | timemania |
A loteria dos times de futebol |
| Dupla Sena | duplasena |
Dois sorteios em um |
| Federal | federal |
Prêmios fixos garantidos |
| Dia de Sorte | diadesorte |
Escolha seu mês da sorte |
| Super Sete | supersete |
7 colunas de números |
| +Milionária | maismilionaria |
Prêmios milionários |
Este projeto foi desenvolvido com as seguintes tecnologias:
- Go 1.25+ - Linguagem de programação
- Gin Web Framework - Framework HTTP web
- MongoDB - Banco de dados NoSQL
- Swagger/OpenAPI - Documentação da API
- Docker - Containerização
- Cron - Agendamento de tarefas
github.com/gin-gonic/gin // Framework web
go.mongodb.org/mongo-driver // Driver MongoDB
github.com/swaggo/gin-swagger // Documentação Swagger
github.com/robfig/cron/v3 // Scheduler
github.com/joho/godotenv // Gerenciamento de variáveis de ambienteAntes de começar, você precisará ter instalado:
- Go 1.25 ou superior - Download
- MongoDB 4.4 ou superior - Download
- Git - Download
- Docker (opcional) - Download
git clone https://github.com/marcosoleniuk/loterias-api-golang.git
cd loterias-api-golangCrie um arquivo .env na raiz do projeto:
# Configuração do Servidor
PORT=9050
GIN_MODE=debug
# Configuração do MongoDB
MONGODB_URI=mongodb://localhost:27017/loterias
# Configuração do Scheduler (formato cron)
CRON_SCHEDULE=0 22 * * *go mod download
go mod tidy# Windows - Serviço local
net start MongoDB
# Ou via Docker
docker run -d -p 27017:27017 --name loterias-mongodb mongo:latest# Executar diretamente
go run cmd/server/main.go
# Ou compilar e executar
go build -o loterias-api.exe cmd/server/main.go
./loterias-api.exegit clone https://github.com/marcosoleniuk/loterias-api-golang.git
cd loterias-api-golangO Docker Compose já vem com configurações padrão.
# Iniciar serviços
docker-compose up -d
# Visualizar logs
docker-compose logs -f
# Parar serviços
docker-compose downVocê pode usar a API diretamente em produção sem precisar instalar nada:
URL Base: https://api-loterias.moleniuk.com/api
Swagger Docs: https://api-loterias.moleniuk.com/swagger/index.html
Acesse no navegador:
http://localhost:9050/
http://localhost:9050/swagger/index.html
curl https://api-loterias.moleniuk.com/apicurl https://api-loterias.moleniuk.com/api/megasena/latestcurl https://api-loterias.moleniuk.com/api/megasena/2500curl https://api-loterias.moleniuk.com/api/lotofacilcurl http://localhost:9050/apicurl https://api-loterias.moleniuk.com/api/megasena/latestExemplo de resposta (resultado mais recente):
{
"loteria": "megasena",
"concurso": 2932,
"data": "25/10/2025",
"local": "ESPAÇO DA SORTE em SÃO PAULO, SP",
"dezenasOrdemSorteio": ["40", "04", "53", "25", "36", "13"],
"dezenas": ["04", "13", "25", "36", "40", "53"],
"premiacoes": [
{
"descricao": "6 acertos",
"faixa": 1,
"numeroDeGanhadores": 1,
"valor": 96166949.14
},
{
"descricao": "5 acertos",
"faixa": 2,
"numeroDeGanhadores": 144,
"valor": 27798.3
},
{
"descricao": "4 acertos",
"faixa": 3,
"numeroDeGanhadores": 6869,
"valor": 960.58
}
],
"municipiosUFGanhadores": [
{
"ganhadores": 1,
"municipio": "OURINHOS",
"posicao": 1,
"uf": "SP"
}
],
"acumulou": false,
"proximoConcurso": 2933,
"dataProximoConcurso": "28/10/2025",
"valorArrecadado": 100453338,
"valorAcumuladoConcurso_0_5": 16774002.79,
"valorAcumuladoConcursoEspecial": 133392230.93,
"valorEstimadoProximoConcurso": 3500000
}Produção: https://api-loterias.moleniuk.com/api
Local: http://localhost:9050/api
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api |
Lista todas as loterias disponíveis |
GET |
/api/{loteria} |
Retorna todos os resultados de uma loteria |
GET |
/api/{loteria}/latest |
Retorna o resultado mais recente |
GET |
/api/{loteria}/{concurso} |
Retorna resultado de um concurso específico |
{loteria}: ID da loteria (ex:megasena,lotofacil){concurso}: Número do concurso (ex:2650)
{
"loteria": "string",
"concurso": "number",
"data": "date",
"dezenas": ["string"],
"premiacoes": [
{
"acertos": "number",
"vencedores": "number",
"valorPremio": "number"
}
]
}{
"error": "Resource Not Found",
"message": "Invalid lottery ID. Available lotteries: megasena, lotofacil, ..."
}loterias-api-golang/
├── cmd/
│ └── server/
│ └── main.go # Entry point da aplicação
├── internal/
│ ├── config/
│ │ └── cors.go # Configuração CORS
│ ├── controller/
│ │ ├── api_controller.go # Handlers HTTP
│ │ └── root_controller.go # Rota raiz
│ ├── model/
│ │ ├── loteria.go # Modelo de loterias
│ │ ├── resultado.go # Modelo de resultados
│ │ └── exceptions.go # Tratamento de erros
│ ├── repository/
│ │ └── resultado_repository.go # Acesso ao MongoDB
│ ├── scheduler/
│ │ └── scheduled_consumer.go # Cron jobs
│ └── service/
│ ├── consumer.go # Consumo da API Caixa
│ ├── resultado_service.go # Lógica de negócio
│ └── loterias_update.go # Atualização de dados
├── docs/
│ ├── docs.go # Documentação Swagger
│ ├── swagger.json
│ └── swagger.yaml
├── docker-compose.yml # Orquestração Docker
├── Dockerfile # Imagem Docker
├── Makefile # Comandos make
├── go.mod # Dependências Go
└── .env # Variáveis de ambiente
┌─────────────┐
│ Cliente │
└──────┬──────┘
│ HTTP Request
▼
┌─────────────────┐
│ Gin Router │
│ (CORS/Logger) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Controller │
│ (Handlers) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Service │
│ (Business Logic)│
└────────┬────────┘
│
▼
┌─────────────────┐
│ Repository │
│ (Data Access) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ MongoDB │
└─────────────────┘
O sistema possui um scheduler que executa automaticamente:
- Horário padrão: Diariamente às 22:00 (após os sorteios)
- Configurável via: Variável
CRON_SCHEDULEno.env - Função: Busca os resultados mais recentes e atualiza o banco
// Formato Cron: minuto hora dia mês dia-da-semana
// Exemplo: "0 22 * * *" = Todos os dias às 22:00# Ver todos os comandos disponíveis
make help
# Executar aplicação
make run
# Compilar binário
make build
# Executar testes
make test
# Testes com cobertura
make test-cover
# Gerar documentação Swagger
make swagger
# Build Docker
make docker-build
# Executar com Docker Compose
make docker-run# Desenvolvimento
go run cmd/server/main.go
# Build
go build -o loterias-api.exe cmd/server/main.go
# Testes
go test ./...
go test -v ./internal/service/...
# Formatação
go fmt ./...
# Linter
go vet ./...
# Atualizar dependências
go mod tidy
go mod download# Instalar swag
go install github.com/swaggo/swag/cmd/swag@latest
# Gerar documentação
swag init -g cmd/server/main.go -o docs
# A documentação estará disponível em /swagger/index.html# Todos os testes
go test ./...
# Testes verbosos
go test -v ./...
# Testes com cobertura
go test -cover ./...
# Gerar relatório HTML de cobertura
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.outinternal/
└── service/
├── consumer.go
└── consumer_test.go # Testes do consumer
docker build -t loterias-api-golang .docker run -p 9050:9050 --env-file .env loterias-api-golang# Iniciar serviços (API + MongoDB)
docker-compose up -d
# Ver logs
docker-compose logs -f api
# Parar serviços
docker-compose down
# Remover volumes
docker-compose down -vCrie um arquivo .env na raiz do projeto:
# Porta do servidor
PORT=9050
# Modo do Gin (debug, release, test)
GIN_MODE=debug
# URI do MongoDB
MONGODB_URI=mongodb://localhost:27017/loterias
# Schedule do cron (formato: minuto hora dia mês dia-da-semana)
# Padrão: Todos os dias às 22:00
CRON_SCHEDULE=0 22 * * *O CORS já está configurado no arquivo internal/config/cors.go para aceitar:
- ✅ Todas as origens (
*) - ✅ Métodos: GET, POST, PUT, DELETE, OPTIONS
- ✅ Headers comuns
Para restringir origens em produção, edite:
// internal/config/cors.go
config.AllowOrigins = []string{"https://seu-dominio.com"}A aplicação usa o logger padrão do Gin que exibe:
- Método HTTP
- Path da requisição
- Status code
- Latência
- IP do cliente
Exemplo:
[GIN] 2024/10/27 - 14:30:45 | 200 | 2.456789ms | 192.168.1.10 | GET "/api/megasena/latest"
curl http://localhost:9050/- Configure as variáveis de ambiente
GIN_MODE=release
MONGODB_URI=mongodb://seu-servidor:27017/loterias
PORT=9050- Compile o binário otimizado
go build -ldflags="-s -w" -o loterias-api cmd/server/main.go- Execute o binário
./loterias-api# Build da imagem
docker build -t loterias-api:v1.0 .
# Push para registry (opcional)
docker tag loterias-api:v1.0 seu-registry/loterias-api:v1.0
docker push seu-registry/loterias-api:v1.0
# Deploy
docker run -d \
-p 9050:9050 \
-e GIN_MODE=release \
-e MONGODB_URI=mongodb://mongo:27017/loterias \
--name loterias-api \
loterias-api:v1.0Contribuições são sempre bem-vindas!
- Faça um Fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona nova feature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
- Siga as convenções do Go (Effective Go)
- Use
go fmtpara formatar o código - Execute
go vetantes de commitar - Escreva testes para novas funcionalidades
- Atualize a documentação Swagger quando necessário
Este projeto está sob a licença Apache-2.0. Veja o arquivo LICENSE para mais detalhes.
Marcos Oleniuk
- 📧 Email: [email protected]
- 💬 WhatsApp: +55 44 9 9842-5745
- Caixa Econômica Federal pela API pública de loterias
- Comunidade Go pela excelente documentação
- SETUP.md - Guia detalhado de instalação
- COMMANDS.md - Lista completa
- Swagger Docs - API interativa
⭐ Se este projeto foi útil, considere dar uma estrela!
Made with ❤️ and Go