Skip to content
Snippets Groups Projects
Commit 040be1ce authored by Taha Cherfia's avatar Taha Cherfia
Browse files

HOLI-5486: refactor voltastics api

parent 2d0058e2
No related branches found
No related tags found
No related merge requests found
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> => {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment