URL do produto: https://euromilhões.api.pedromealha.dev
URL de teste: https://euromillions.staging.api.pedromealha.dev
Pilha de tecnologia : Python, Flask, PostgreSQL, Docker, Terraform, Github Actions
AVISO LEGAL : Os dados de resultados nesta API são analisados no site https://www.euro-millions.com. Os dados são apenas para fins informativos; você não deve interpretar tais informações ou outros dados como aconselhamento financeiro. Nada contido nesta API constitui uma solicitação, recomendação, endosso ou oferta de compra de bilhetes da Euromilhões. Esta API não é afiliada de nenhuma forma à organização Euromilhões.
Uma pequena API REST para o concurso Euromilhões. Aqui você encontrará todos os resultados desde 2004 e algumas estatísticas/análises.
O ponto final para realizar sorteios possui alguns recursos interessantes para filtrar os sorteios por year
ou dates
.
Isso foi feito devido à falta de uma maneira de obter esses dados facilmente. Como esta informação é de conhecimento público, as instituições devem disponibilizar uma API para a mesma. Entretanto, com estes endpoints, a comunidade pode construir produtos incríveis em torno do contexto do Euromilhões, seja uma aplicação móvel ou uma aplicação web.
Meu objetivo também será construir um aplicativo web que permita gerar números para jogar com base em estatísticas/análises.
Para a documentação utilizamos a especificação OpenAPI. Temos todos os endpoints disponíveis com os esquemas e exemplos para cada caso de uso. Não é apenas porque é um padrão da indústria usá-lo, mas também porque é muito fácil de atualizar e ler.
Em relação ao banco de dados, usamos a linguagem de marcação de banco de dados – DBML, abreviadamente. Novamente, é realmente incrível e pode colocar qualquer novo marceneiro em ação imediatamente. Existe também uma ferramenta online para visualizar os esquemas das tabelas.
Você pode verificar os documentos atuais aqui
Para os resultados dos sorteios do euromilhões, utilizámos o site https://www.euro-millions.com. Possui páginas com dados históricos de todos os resultados dos sorteios existentes. Não consumimos nenhuma API, analisamos a página da web em busca dos dados específicos de que precisamos.
Para novos sorteios temos o seguinte cronjob em execução:
# Todas as terças e sextas-feiras, a cada 15 minutos, das 21h às 23h*/15 21-23 * * 2,5 flyctl ssh console -a prod-euromilhões-api -C "sh app/scripts/cronjobs/add_draws.sh"*/15 21 -23 * * 2,5 flyctl ssh console -a staging-euromilhões-api -C "sh app/scripts/cronjobs/add_draws.sh"
Este comando executará o script para adicionar desenhos dentro de nossos contêineres de produção e teste. Dessa forma garantimos que o código seja executado no mesmo ambiente e não precisamos de um endpoint exposto para fazê-lo.
Aproveitamos o poder e a simplicidade que o Github Actions tem. Foi fácil integrar nosso fluxo de implantação para preparação e produção. Também temos o Terraform em execução em todos os nossos fluxos de trabalho. Atualmente, estamos usando o registro de contêiner do Github para enviar uma imagem docker que usaremos para executar nossa API. Como o Fly.io não nos permite ter ambientes diferentes, precisávamos criar aplicativos diferentes para preparação e produção. Assim que enviarmos a imagem, só precisamos fazer um novo lançamento para ter uma nova versão instalada e funcionando. Esta é uma grande melhoria porque agora nossa API está rodando em um contêiner, facilitando a implantação e a manutenção.
Felizmente podemos usar o Terraform para gerenciar a infra do Fly.io com código. Como não há muito o que fazer, no momento usamos o terraform para criar o aplicativo, os IPs públicos do aplicativo e os certificados de domínio. Para o banco de dados, o Fly.io ainda não permite gerenciá-los usando terraform, então tivemos que criá-los manualmente usando flyctl
. Isso é integrado ao nosso CI nos fluxos de trabalho de preparação e produção com seus respectivos espaços de trabalho.
Temos duas maneiras de trabalhar localmente neste projeto: docker ou executar aplicativo flash.
Para começar, clone o repositório
clone do git https://github.com/pedro-mealha/euromilhões-apicd euromillions-api
Construir e iniciar o contêiner docker
faça start_docker
Isso iniciará um contêiner com um banco de dados postgres e outro contêiner com uma imagem python. No contêiner python ele copiará todos os arquivos de projetos, instalará os requisitos e por último executará o aplicativo flask.
Certifique-se de ter o python 3.12 instalado e um banco de dados postgres.
Requisitos de instalação.
pip instalar -r requisitos.txt
Execute o aplicativo flask
começar
Para migrações, estamos usando o ioiô. É muito simples, mas mesmo assim temos alguns comandos no Makefile:
Para executar migrações:
fazer migrar
Para reverter a última migração:
fazer migrar_rollback
Criar uma nova migração é um pouco complicado, porque não gostamos do arquivo .py, então decidimos usar arquivos sql brutos. Mas isso tem um custo que precisamos para criar novos arquivos manualmente.
Basta seguir o padrão que já existe e deve ser bastante fácil.
Licenciado pelo MIT (arquivo LICENSE).