Giter Site home page Giter Site logo

bsale-airline's Introduction

Bsale Airline API

La API simula el trabajo de una aerolínea, ubicando a los pasajeros en un avión. Se realizó con Python (framework: FastAPI). Solo cuenta con el endpoint check_in, además del endpoint root (que solo retorna un mensaje).
Este endpoint recibe por "path parameter" el id de vuelo. Con ese id realiza diferentes consultas para acceder a los datos necesarios (información de los pasajeros y sus tarjetas de embarque, información de los aviones, información de vuelos, etc), que se encuentran en una base de datos MySQL. Se utilizó SQL Alchemy como ORM.
Ya con los datos listos, ordena los pasajeros en los asientos vacíos que quedan. Se le da prioridad a los pasajeros menores de 18 años, debido a que deben sentarse al lado de un adulto que se responsabilice de ellos. Luego se van asignando asientos (en la misma fila o culumna en lo posible) para los demas pasajeros, dando prioridad a los grupos más grandes, es decir, los grupos más grandes de pasajeros que hicieron la compra del pasaje a la vez (comparten purchaseId).
El endpoint check_in cuenta con varios tests escritos también en Python (PyTest) que verifican que:

  • los datos del vuelo estén correctos
  • la cantidad de pasajeros retornados sea la correcta
  • no se repiten pasajeros
  • los pasajeros menores de 18 años tienen a un adulto responsable al lado
  • no se asignaron asientos de una clase diferente a ningún pasajero
  • hay 60% o más de pasajeros que tienen a un acompañante cerca (que comparte purchaseId)

Endpoints:

  • root:
    • path: "/"
    • response: JSON
      {
          "msg": "Welcome to Bsale Airline API"
      }
  • check_in:
    • path: "/flights/<flight_id>/passengers"
    • path param: flight_id (int que corresponde al id de vuelo)
    • response: JSON
      {
          "code": 200,
          "data": {
              "flightId": 1,
              "takeoffDateTime": 1688207580,
              "takeoffAirport": "Aeropuerto Internacional Arturo Merino Benitez, Chile",
              "landingDateTime": 1688221980,
              "landingAirport": "Aeropuerto Internacional Jorge Cháve, Perú",
              "airplaneId": 1,
              "passengers": [
                  {
                      "passengerId": 90,
                      "dni": 983834822,
                      "name": "Marisol",
                      "age": 44,
                      "country": "México",
                      "boardingPassId": 24,
                      "purchaseId": 47,
                      "seatTypeId": 1,
                      "seatId": 1
                  },
                  {...}
              ]
          }
      }
    • errors:
      • error al conectar con la DB: status_code=400
      • error al no encontrar un flight_id: status_code=404

Docs

La documentación (Swagger) se encuentra en "/docs"

Local

Una vez clonado el repositorio, es necesario instalar los requerimientos. Antes de eso hay que descomentar las líneas en el archivo requirements.txt.
Para instalar las dependencias ejecutar pip install requirements.txt
También es necesario crear un archivo .env en la ruta "./", este debe contener las sigueintes variables de entorno, con sus respectivos valores para acceder a la DB: env MYSQL_HOST="localhost" MYSQL_PORT="3306" MYSQL_USER="username" MYSQL_PASSWORD="password"

Server

Comando para iniciar el servidor uvicorn main:app --reload

Testing

Comando para ejecutar los tests pytest

Future

  • Para los pasajeros que viajan de a dos (es decir, cuando solo hay dos pasajeros con el mismo purchaseId) sentarlos al lado.
  • Si un pasajero viaja solo (es decir, no hay otro pasajero con el mismo purchaseId) que su asiento no tenga un asiento disponible al lado; para optimizar el espacio.

bsale-airline's People

Contributors

fedeegmz avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.