From bab32023fb6f4eb303df26c29d26182ccc27d020 Mon Sep 17 00:00:00 2001 From: Clement Date: Mon, 13 May 2024 23:13:12 +0200 Subject: [PATCH] implement city route for OTM --- Express/barAndCafe/src/OpenTripMaps.ts | 0 Express/barAndCafe/src/app.ts | 25 +++++++++ Express/barAndCafe/src/openTripMaps.ts | 71 ++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) delete mode 100644 Express/barAndCafe/src/OpenTripMaps.ts create mode 100644 Express/barAndCafe/src/openTripMaps.ts diff --git a/Express/barAndCafe/src/OpenTripMaps.ts b/Express/barAndCafe/src/OpenTripMaps.ts deleted file mode 100644 index e69de29..0000000 diff --git a/Express/barAndCafe/src/app.ts b/Express/barAndCafe/src/app.ts index f9c7f25..22e8676 100644 --- a/Express/barAndCafe/src/app.ts +++ b/Express/barAndCafe/src/app.ts @@ -1,3 +1,4 @@ +import { getCity } from "./openTripMaps" import express from "express" /** * Initialize Express application instance. @@ -22,6 +23,7 @@ function getWelcome(req: express.Request, res: express.Response) { * @openapi * /welcome: * get: + * summary: retun just hello * description: Welcome to swagger-jsdoc! * responses: * 200: @@ -29,4 +31,27 @@ function getWelcome(req: express.Request, res: express.Response) { */ app.get("/welcome", getWelcome) +/** + * @openapi + * /otm/city: + * get: + * summary: return the drinks in a city + * description: return the drinks in a defined perimeter in a city + * parameters: + * - name: name + * in: query + * required: true + * description: the name of the city + * schema: + * type: string + * responses: + * 200: + * description: Return a list of bars and coffee in city in geoJSON format + * 400: + * description: Missing Argument Error + * 401: + * description: Missing OTM tocken + */ +app.get("/otm/city", getCity) + export default app \ No newline at end of file diff --git a/Express/barAndCafe/src/openTripMaps.ts b/Express/barAndCafe/src/openTripMaps.ts new file mode 100644 index 0000000..e72fabe --- /dev/null +++ b/Express/barAndCafe/src/openTripMaps.ts @@ -0,0 +1,71 @@ +import axios from 'axios'; +import express from "express" +import * as dotenv from "dotenv"; + +dotenv.config({path: '../../.env'}) + +const key = process.env.OPEN_TRIP_MAPS_KEY + +const optionsDrink = { + method: 'GET', + url: 'https://api.opentripmap.com/0.1/en/places/radius', + params: { + radius: '1000', + lon: '-1.43333', + lat: '46.66667', + apikey: key, + kinds: 'bars,cafes,pubs,biergartens' + }, + headers: {'Content-Type': 'application/json'} +}; + + +const optionsCity = { + method: 'GET', + url: 'https://api.opentripmap.com/0.1/en/places/geoname', + params: { + name: 'Paris', + apikey: key + }, + headers: {'Content-Type': 'application/json'} +}; + +/** + * Handle GET request for city search route ('/otm/city'). + * @param {express.Request} req - HTTP Request object. + * @param {express.Response} res - HTTP Response object. + */ +export async function getCity(req: express.Request, res: express.Response) { + const cityName = req.query["name"] + const radius = req.query["radius"] + + if(!key){ + res.status(401).send("Missing OTM key") + return + } + if(!cityName){ + res.status(400).send("Missing Argument name") + return + } + if(radius){ + optionsDrink.params.radius = radius as string + } + + optionsCity.params.name = cityName as string + + try { + const { data } = await axios.request(optionsCity); + optionsDrink.params.lat = data.lat + optionsDrink.params.lon = data.lon + } catch (error) { + console.error(error); + } + + try { + const { data } = await axios.request(optionsDrink); + res.send(data); + } catch (error) { + console.error(error); + } +} +