URL de producción: https://euromillions.api.pedromealha.dev
URL de preparación: https://euromillions.staging.api.pedromealha.dev
Pila de tecnología : Python, Flask, PostgreSQL, Docker, Terraform, Github Actions
DESCARGO DE RESPONSABILIDAD : Los datos de resultados de esta API se analizan desde el sitio web https://www.euro-millions.com. Los datos son sólo para fines informativos, no debe interpretar dicha información u otros datos como asesoramiento financiero. Nada de lo contenido en esta API constituye una solicitud, recomendación, respaldo u oferta para comprar boletos de Euromillones. Esta API no está afiliada de ningún tipo a la organización Euromillones.
Una pequeña API REST para el concurso Euromillones. Aquí encontrará todos los resultados desde 2004 y algunas estadísticas/análisis.
El punto final para realizar sorteos tiene algunas características interesantes para filtrar los sorteos por year
o dates
.
Esto se hizo debido a la falta de una forma de obtener estos datos fácilmente. Como esta información es de conocimiento público, las instituciones deberían proporcionar una API para la misma. Mientras tanto, con estos puntos finales, la comunidad puede crear productos sorprendentes en torno al contexto de Euromillones, ya sea una aplicación móvil o una aplicación web.
Mi objetivo también será crear una aplicación web que permita generar números para jugar basados en estadísticas/análisis.
Para la documentación utilizamos la especificación OpenAPI. Tenemos todos los puntos finales disponibles con los esquemas y ejemplos para cada caso de uso. No es sólo porque su uso es un estándar de la industria, sino también porque es realmente fácil de actualizar y leer.
Con respecto a la base de datos utilizamos el lenguaje de marcado de bases de datos (DBML para abreviar). Una vez más, es realmente sorprendente y puede acelerar a cualquier nuevo miembro de inmediato. También hay una herramienta en línea para visualizar los esquemas de las tablas.
Puede consultar los documentos actuales aquí.
Para los resultados de los sorteos de euromillones utilizamos el sitio web https://www.euro-millions.com. Tiene páginas con datos históricos de todos los resultados de los sorteos existentes. No consumimos ninguna API, analizamos la página web en busca de los datos específicos que necesitamos.
Para nuevos sorteos tenemos el siguiente cronjob ejecutándose:
# Todos los martes y viernes cada 15min durante 21h-23h*/15 21-23 * * 2,5 flyctl ssh console -a prod-euromillions-api -C "sh app/scripts/cronjobs/add_draws.sh"*/15 21 -23 * * 2,5 consola flyctl ssh -a staging-euromillones-api -C "sh aplicación/scripts/cronjobs/add_draws.sh"
Este comando ejecutará el script para agregar dibujos dentro de nuestros contenedores de producción y preparación. De esta manera nos aseguramos de que el código se ejecute en el mismo entorno y no necesitamos un punto final expuesto para hacerlo.
Aprovechamos el poder y la simplicidad que tienen Github Actions. Fue fácil integrar nuestro flujo de implementación para la puesta en escena y la producción. También tenemos Terraform ejecutándose en todos nuestros flujos de trabajo. Actualmente, estamos usando el registro de contenedor de Github para enviar una imagen de Docker que usaremos para ejecutar nuestra API. Debido a que Fly.io no nos permite tener diferentes entornos, necesitábamos crear diferentes aplicaciones para la puesta en escena y la producción. Tan pronto como publiquemos la imagen, solo necesitamos realizar una nueva versión para tener una nueva versión en funcionamiento. Esta es una gran mejora porque ahora nuestra API se ejecuta en un contenedor, lo que permite que su implementación y mantenimiento sean más fáciles.
Afortunadamente, podemos usar Terraform para administrar la infraestructura de Fly.io con código. Como no hay mucho que hacer, ahora usamos terraform para crear la aplicación, las IP públicas de la aplicación y los certificados de dominio. Para la base de datos, Fly.io todavía no permite administrarlas usando terraform, por lo que tuvimos que crearlas manualmente usando flyctl
. Esto está integrado en nuestro CI en los flujos de trabajo de preparación y producción con sus respectivos espacios de trabajo.
Tenemos dos formas de trabajar localmente en este proyecto: acoplar o ejecutar la aplicación flash.
Para empezar, clona el repositorio.
clon de git https://github.com/pedro-mealha/euromillions-apicd euromillions-api
Construir e iniciar el contenedor acoplable
hacer start_docker
Esto iniciará un contenedor con una base de datos de Postgres y otro contenedor con una imagen de Python. En el contenedor de Python, copiará todos los archivos de proyectos, instalará los requisitos y, por último, ejecutará la aplicación flask.
Asegúrese de tener instalado Python 3.12 y una base de datos Postgres.
Requisitos de instalación.
instalación de pip -r requisitos.txt
Ejecutar la aplicación matraz
empezar
Para las migraciones estamos usando yoyo. Es realmente sencillo pero, aun así, tenemos algunos comandos en Makefile:
Para ejecutar migraciones:
hacer migrar
Para revertir la última migración:
hacer migrar_rollback
Crear una nueva migración es un poco complicado, porque no nos gustó el archivo .py, así que decidimos usar archivos SQL sin formato. Pero esto tiene el costo de tener que crear nuevos archivos manualmente.
Simplemente siga el patrón que ya existe y debería ser bastante fácil.
Licencia MIT (archivo LICENCIA).