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