From 040be1ce8a434d7c27ac4accdfda3b022703293b Mon Sep 17 00:00:00 2001 From: Taha Abdelmoutaleb Cherfia <taha.cherfia@holi.team> Date: Thu, 17 Aug 2023 11:32:02 +0200 Subject: [PATCH] HOLI-5486: refactor voltastics api --- app/voltastics.ts | 86 +++++++++++------------------------------------ 1 file changed, 20 insertions(+), 66 deletions(-) diff --git a/app/voltastics.ts b/app/voltastics.ts index 0cf9186..e225900 100644 --- a/app/voltastics.ts +++ b/app/voltastics.ts @@ -1,8 +1,16 @@ +import { + ApiCategoriesResponse, + ApiDefaults, + ApiEngagementResponse, + ApiRoutes, + ApiSearchEngagement, + ApiSearchEngagementsResponse, +} from "./api_types.ts"; +import { logger } from "./logging.ts"; +import { ServerConfig, VoltasticsConfig } from "./server.ts"; import { CategoriesResponse, Category, - CitiesResponse, - City, Engagement, EngagementParameters, EngagementResponse, @@ -12,19 +20,7 @@ import { TrackEngagementViewParameters, TrackEngagementViewResponse, } from "./types.ts"; - -import { - ApiCategoriesResponse, - ApiCitiesResponse, - ApiDefaults, - ApiEngagementResponse, - ApiRoutes, - ApiSearchEngagement, - ApiSearchEngagementsResponse, -} from "./api_types.ts"; -import { ServerConfig, VoltasticsConfig } from "./server.ts"; -import { logger } from "./logging.ts"; -import { sortCitiesAlphabetically } from "./helpers.ts"; +import { calculateRadius } from "./utils.ts"; const transformOrganizer = ( engagement: ApiSearchEngagement, @@ -87,20 +83,6 @@ const transformEngagementsResponse = (imageProxyBaseUrl: string) => }; }; -const transformCity = (city: string): City => { - return { - name: city, - }; -}; - -const transformCitiesResponse = ( - citiesResponse: ApiCitiesResponse, -): CitiesResponse => { - return { - data: citiesResponse.sort(sortCitiesAlphabetically).map(transformCity), - }; -}; - const transformCategory = (category: string): Category => { return { name: category, @@ -134,27 +116,23 @@ const fetchFromVoltasticsApi = ( const buildVoltasticsEngagementsSearchParams = ({ limit = 5, offset = 0, - location = ApiDefaults.CITY, + location, category, - latitude, - longitude, - radiusKm, }: EngagementsParameters) => { const params = new URLSearchParams(); params.append("limit", limit.toString()); params.append("offset", offset.toString()); - params.append("city", location); - if (latitude) { - params.append("lat", latitude.toString()); - } + if (location) { + const { geolocation: { geometry, properties: { lat, lon } } } = location; - if (longitude) { - params.append("lon", longitude.toString()); - } + const radius = calculateRadius(geometry); - if (radiusKm) { - params.append("radius", radiusKm.toString()); + params.append("lat", lat.toString()); + params.append("lon", lon.toString()); + params.append("radius", radius.toString()); + } else { + params.append("city", ApiDefaults.CITY); } if (category) { @@ -251,30 +229,6 @@ export const fetchEngagement = }); }; -export const fetchCities = ( - voltasticsConfig: VoltasticsConfig, -): Promise<CitiesResponse> => { - const start = Date.now(); - logger.info(`fetching cities from ${voltasticsConfig.baseUrl}`); - - return fetchFromVoltasticsApi(voltasticsConfig, ApiRoutes.CITIES) - .then((result) => result.json()) - .then(transformCitiesResponse) - .then((result) => { - const duration = Date.now() - start; - logger.debug(`fetching cities took ${duration} ms`); - return result; - }) - .catch((e) => { - const duration = Date.now() - start; - logger.error( - `Error performing request to ${voltasticsConfig.baseUrl} after ${duration} ms: ${e.message}`, - { duration }, - ); - throw e; - }); -}; - export const fetchCategories = ( voltasticsConfig: VoltasticsConfig, ): Promise<CategoriesResponse> => { -- GitLab