{"id":22790069,"url":"https://github.com/miusarname2/test-biintelli","last_synced_at":"2026-05-19T04:35:31.880Z","repository":{"id":226313871,"uuid":"768202933","full_name":"miusarname2/test-biintelli","owner":"miusarname2","description":"This is a technical test conducted by biintelli for the position of back-end developer.","archived":false,"fork":false,"pushed_at":"2024-03-11T16:37:18.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-30T16:46:47.923Z","etag":null,"topics":["node-ts","nodejs"],"latest_commit_sha":null,"homepage":"https://test-biintelli.onrender.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miusarname2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-06T16:51:44.000Z","updated_at":"2024-03-10T16:47:59.000Z","dependencies_parsed_at":"2025-02-05T18:17:49.237Z","dependency_job_id":"c9488fe7-bcc4-4367-aeab-c67ccfa6f3ba","html_url":"https://github.com/miusarname2/test-biintelli","commit_stats":null,"previous_names":["miusarname2/test-biintelli"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/miusarname2/test-biintelli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2Ftest-biintelli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2Ftest-biintelli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2Ftest-biintelli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2Ftest-biintelli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miusarname2","download_url":"https://codeload.github.com/miusarname2/test-biintelli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miusarname2%2Ftest-biintelli/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264816058,"owners_count":23668110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["node-ts","nodejs"],"created_at":"2024-12-12T02:17:24.501Z","updated_at":"2026-05-19T04:35:26.836Z","avatar_url":"https://github.com/miusarname2.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# VIAJE POR COLOMBIA API REST\n\n# Ejecución de VIAJE POR COLOMBIA API REST:\n\nComo se mencionó previamente, la empresa VIAJE POR COLOMBIA busca una solución que permita conectar viajes en todo el mundo. Este proyecto debe recibir como entrada el origen y el destino del viaje del usuario. Luego, el sistema debe consultar todos las rutas asociados disponibles y determinar si es posible trazar una ruta de viaje. En caso afirmativo, se debe proporcionar al usuario la ruta calculada; de lo contrario, se emitirá un mensaje indicando que la ruta no puede ser calculada, pero puedes empezar a usarlo ya mismo, en `test-biintelli.onrender.com` esta ya corriendo el servidor desplegado, puedes ir a `test-biintelli.onrender.com/api-docs` a probarlo ya mismo, pero deberas esperar a que inicie, normalmente dura entre 5 y 60 segundo.\n\n## Tabla de Contenidos:\n\n* [Estructura del Proyecto](#1.Estructura-del-Proyecto)\n* [Requisitos](#requisitos)\n* [Instalación](#instalaci%C3%B3n)\n* [Uso](#uso)\n* [Contribuir](#contribuir)\n* [Licencia](#licencia)\n\n## 1. Uso rapido...\n\nUna vez que el servidor esté en funcionamiento, puedes acceder a la documentación y al Swagger UI visitando la ruta `/api-docs`. Aquí encontrarás la documentación detallada de las rutas disponibles junto con ejemplos de uso.\n\n## 2.Estructura del Proyecto:\n\nLa estructura del proyecto sigue una organización basada en la arquitectura hexagonal o arquitectura Onion. A continuación, se muestra la estructura de carpetas del proyecto:\n\n```\n|-- app/\n|   |-- Journey/\n|   |   |-- aplication/\n|   |   |   |-- journey.controller.ts\n|   |   |   |-- journey.routes.ts\n|   |   |-- domain/\n|   |   |   |-- dto/\n|   |   |   |   |-- journey.model.ts\n|   |   |   |-- storage/\n|   |   |   |   |-- journey.ts\n|   |   |-- infrastructure/\n|   |   |   |-- config/\n|   |   |   |   |-- RateLimit.ts\n|   |   |   |-- database/\n|   |   |   |   |-- connection.ts\n|   |   |   |-- repository/\n|   |   |   |   |-- journey.ts\n|   |   |   |   |-- data.ts\n|-- auth/\n|   |-- JWT.js\n|-- prisma/\n|   |-- migrations/\n|   |   |-- schemas.mongodb\n|   |-- schema.prisma\n|-- readme.md\n|-- LICENSE\n|-- package.json\n|-- .gitignore\n|-- index.ts\n|-- .env.exmple\n|-- tsconfig.json\n```\n\n## Modelo Base de Datos\n\nA continuación se presenta el modelo base de datos utilizado en el proyecto:\n\n```prisma\n\nmodel Journey_Flight {\n  id       Int      @id @default(autoincrement())\n  journey  Journey  @relation(fields: [journeyId], references: [id])\n  flight   Flight   @relation(fields: [flightId], references: [id])\n  journeyId Int\n  flightId Int\n}\n\nmodel Journey {\n  id Int @id @default(autoincrement())\n  Origin String\n  Destination String\n  price Decimal\n  flights Journey_Flight[]\n}\n\nmodel Transport{\n  id Int @id @default(autoincrement())\n  FlightCarrier String\n  FlightNumber String\n  Flights Flight[]\n}\n\nmodel Flight{\n  id Int @id @default(autoincrement())\n  Origin String\n  Destination String\n  price Decimal\n  transportId Int\n  journeys Journey_Flight[]\n  transport Transport @relation(fields: [transportId], references: [id])\n}\n```\n\n\n## 3.Requisitos:\n\nLos requisitos para la ejecución de VIAJE POR COLOMBIA API REST son los siguientes:\n\n* Node.js bajo la versión (v18.16.1), esta la puedes instalar desde ([https://nodejs.org/en/download](https://nodejs.org/en/download)).\n Además, para la base de datos, puedes optar por MySQL si prefieres una base de datos local. La conexión a nuestra base de datos personal ya está configurada en las variables de entorno, pero hemos dejado un archivo de ejemplo `.env.example` para referencia.\"\n\n## 4.Instalación:\n\n* Clonamos el repositorio en la carpeta que se desee, para hacerlo mas sencillo puedes entrar a la carpeta donde quieras alojar el proyecto y ahí abres la terminal directamente y ejecutas el siguiente comando:\n\n  ```\n  git clone https://github.com/miusarname2/test-biintelli\n  ```\n* Si quieres hacerlo aún mas sencillo puedes utilizar la extensión \"Git Graph\" y directamente clonas el repositorio después que tengas las credenciales sincronizadas con tu Github, clicando en el apartado clonar repositorio y pegas lo siguiente `https://github.com/miusarname2/test-biintelli` y procedes a ubicar el repositorio donde mas desees.\n* Luego de esto abriremos la terminal clicando en la parte superior del Visual Studio Code en el apartado \"Terminal\" y luego \"New Terminal\", ahí ejecutaremos el comando `npm update` o `npm install`descargar todas las dependencias previamente establecidas en el archivo \"package.json\".\n\n  **NOTA MUY IMPORTANTE: **Recuerda que el archivo de ejemplo \".env.example\" deberás renombrarlo borrando el \".example\" y quedará \".env\" para que la dependencia \"dotenv\" pueda acceder a las variables de entorno, recomendamos realizar todas estas pruebas conectadas a nuestro servidor de MySQL para evitar conflictos y si deseas cambiar el puerto,solo debes ir al archivo .env y cambiar la variable de entorno `PORT` o a las variables de entorno de tu sistema y cambiar la variable de entorno `PORT`  recuerda que en la consola obtendrás la nueva ruta para que procedas a copiarla e ingresarla en el \"Thunder Client\" o  \"Postman\",si deseas utilizar alguno de estos, pero recuerda que swagger esta en `http://localhost:\u003ctu_puerto\u003e/api-docs/`.\n\n  Si no cambias el nombre del archivo `.env.example` a `.env`, te mostara algo como esto:\n\n    ```bash\n  [1]\n  [1] PrismaClientInitializationError: error: Environment variable not found: DATABASE_URL.\n  [1]   --\u003e  schema.prisma:13\n  [1]    |\n  [1] 12 |   provider = \"mysql\"\n  [1] 13 |   url      = env(\"DATABASE_URL\")\n  [1]    |\n  [1]\n  [1] Validation Error Count: 1\n  [1]     at r (C:\\Users\\Oscar Alvarez\\Desktop\\Rima-Backend-Public-\\node_modules\\@prisma\\client\\runtime\\library.js:113:2493) {\n  [1]   clientVersion: '5.10.2',\n  [1]   errorCode: 'P1012'\n  [1] }\n  [1]\n  [1] Node.js v21.6.1\n  ``` \n\nasi que recomentamos hacerlo,para que funcione satisfactoriamente\n\n**Nota Importante** :Si deseas cambiar la configuración y usar una base de datos local o una base de datos MySQL diferente a la que te envié, lo que debes hacer es reemplazar la variable de entorno `DATABASE_URL` y ponerle como valor el string de conexión para la base de datos. Luego de eso, ejecuta las migraciones con `npx prisma migrate reset` para que se hagan las migraciones a la base de datos.\n\n* Por ultimo iniciaremos el servidor con el comando en terminal `npm run dev`, esto inicializará nuestro servidor y podremos visualizar en que ruta y puerto esta el servidor de node en la consola para al hacer uso de ellas en las consultas debes ir a swagger que esta en `http://localhost:\u003ctu_puerto\u003e/api-docs/` . Un ejemplo de lo que deberiamos ver en consola es lo siguiente:\n\n\n  ```bash\n  10:16:50 - Starting compilation in watch mode...\n  [0]\n  [0]\n  [0] 10:17:06 - Found 0 errors. Watching for file changes.\n  [1] ilugrflawgvfcisadifasgdiyfg\n  [1] ⚡️[server]: Server is running at http://localhost:3000\n  ```\n\n\n## 5.Uso:\n\nA continuación observaremos cuales son todas la consultas disponibles en esta API:\n\n\n#### 5.1 Consultar \"tk\":\n\n* **Endpoint** : `/tk`\n* **Método HTTP** : POST\n* **Descripción** : Generador de token y login de la base de la API.\n* **Ejecución:** Para su ejecución debemos ingresar el rol por el \"Body\", entonces iremos a nuestra extensión \"Thunder Client\", clicaremos en \"New Request\" y procedemos a ingresar la siguiente data donde dice `https://www.thunderclient.com/welcome` borraremos esa dirección y agregaremos la siguiente dirección y cambias el predeterminado \"GET\" por \"POST\", luego de eso deberás agregar en los \"Headers\" en el apartado vacío \"header\".\n* Ejemplo del contenido correspondiente en la ruta:\n\n```bash\nhttp://localhost:3000/tk\n```\n\n* Ejemplo del contenido correspondiente en body:\n\n```json\n{\n  \"role\":\"admin\"\n}\n```\n\n* Clicaremos en Send y obtendremos una respuesta similar a esta, ejemplo de respuesta del servidor:\n\n```json\n{\n  \"role\": \"admin\",\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYWRtaW4iLCJpYXQiOjE3MDk5OTk4MzksImV4cCI6MTcxMDAwMzQzOX0.h0GVX5_KA1wwM-a5NZzYCUROGKlNX6z73jVOCasWKxg\"\n}\n```\n\n* Ahora debemos en el apartado \"Headers\" de nuevo y añadir un \"header\" llamado \"Authorization\" y en \"value\" todo el contenido del \"token\", sólo el texto, sin las comillas, de tal modo que quede algo asi `Bearer \u003ctoken\u003e`\n\nA partir de ahora podemos empezar con las consultas.\n\n\n#### 5.2 Consultar \"journey\":\n\n* **Endpoint** : `/journey`\n* **Método HTTP** : POST\n* **Descripción** : Obtiene y consulta los vuelos o las rutas para hacer un viaje, tiene un limite de 50000 consultas/hora.\n* **Ejecución:** Para su ejecución debemos ingresar `\"Origin\", \"Destination\"` por el \"Body\", entonces iremos a nuestra extensión \"Thunder Client\", clicaremos en \"New Request\" y procedemos a ingresar la siguiente data donde dice `https://www.thunderclient.com/welcome` borraremos esa dirección y agregaremos la siguiente dirección y cambias el predeterminado \"GET\" por \"POST\", luego de eso deberás agregar en los \"Headers\" en el apartado vacío \"header\" la frase \"Authorization\" y poner en value el token que te dio `/tk`, es decir esto `Bearer \u003ctoken\u003e`\n\n* Ejemplo del contenido correspondiente en la ruta:\n\n```bash\nhttp://localhost:3000/journey\n```\n\n* Ejemplo del contenido correspondiente en body:\n\n```json\n{\n  \"Origin\": \"BGA\",\n  \"Destination\": \"BTA\"\n}\n```\n\n* Clicaremos en Send y obtendremos una respuesta similar a esta, ejemplo de respuesta del servidor:\n\n```json\n[\n  {\n    \"id\": 2,\n    \"Origin\": \"BGA\",\n    \"Destination\": \"BTA\",\n    \"price\": \"1000\"\n  },\n  {\n    \"id\": 3,\n    \"Origin\": \"BTA\",\n    \"Destination\": \"BGA\",\n    \"price\": \"1200\"\n  }\n]\n```\n\nListo, ahora obtenido una ruta,simpre que existan viajes directo de ida y de regreso,siempre te dara solo los viajes directos, continuemos con la guía.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiusarname2%2Ftest-biintelli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiusarname2%2Ftest-biintelli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiusarname2%2Ftest-biintelli/lists"}