diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 383459b525e6cc99f536832a194cea557949ff46..376a5af8419e10fd43c4d8aa94567017299a780e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,23 +9,23 @@ default:
     - 1cpu-4gb # build on smaller machine
 
 variables:
-  API_DOMAIN_PATH: "$CI_PROJECT_DIR/api_domain"
+  API_DOMAIN_PATH: '$CI_PROJECT_DIR/api_domain'
 
 # job templates
 
 .deploy:
-  image: 
+  image:
     name: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/hashicorp/terraform:1.6.6'
     # default entrypoint is terraform command, but we want to run shell scripts
-    entrypoint: ["/bin/sh", "-c"]
+    entrypoint: ['/bin/sh', '-c']
   variables:
     ENVIRONMENT_ID: $CI_ENVIRONMENT_SLUG
   artifacts:
     paths:
-      - "terraform/environments/crash.log" # optional, only available in case of a crash/panic
-      - "terraform/environments/terraform-*.log" # separate log for every step/command
+      - 'terraform/environments/crash.log' # optional, only available in case of a crash/panic
+      - 'terraform/environments/terraform-*.log' # separate log for every step/command
       - $API_DOMAIN_PATH
-    name: "${CI_JOB_NAME}_${CI_JOB_ID}"
+    name: '${CI_JOB_NAME}_${CI_JOB_ID}'
     #when: on_failure
     expire_in: 1 week
   script:
@@ -67,7 +67,7 @@ sast:
   needs: ['cache_lint_test']
   stage: test
 include:
-- template: Security/SAST.gitlab-ci.yml
+  - template: Security/SAST.gitlab-ci.yml
 
 build_docker:
   needs: ['cache_lint_test']
@@ -83,7 +83,7 @@ build_docker:
     - docker push $GCR_IMAGE:$CI_COMMIT_SHA # this is the tag that is used for deployment
     - docker push $GCR_IMAGE:$CI_COMMIT_REF_SLUG # just for easyly knowing which is the last image for a branch
 
-## review environments 
+## review environments
 
 review_deploy:
   extends: .deploy
@@ -111,7 +111,7 @@ review_destroy:
   image:
     name: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/hashicorp/terraform:1.6.6'
     # default entrypoint is terraform command, but we want to run shell scripts
-    entrypoint: ["/bin/sh", "-c"]
+    entrypoint: ['/bin/sh', '-c']
   variables:
     # has to be set to none for auto stop
     GIT_STRATEGY: none
@@ -122,9 +122,9 @@ review_destroy:
   dependencies: [] # explicitly disable artifact usage
   artifacts:
     paths:
-      - "terraform/environments/crash.log" # optional, only available in case of a crash/panic
-      - "terraform/environments/terraform-*.log" # separate log for every step/command
-    name: "${CI_JOB_NAME}_${CI_JOB_ID}"
+      - 'terraform/environments/crash.log' # optional, only available in case of a crash/panic
+      - 'terraform/environments/terraform-*.log' # separate log for every step/command
+    name: '${CI_JOB_NAME}_${CI_JOB_ID}'
     when: on_failure
     expire_in: 1 week
   script:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2f34ebc58adb3df395e52bedee0d670532274122..f4b830c8175179542b86e58cc479dbe443a5adbb 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,7 +1,7 @@
 repos:
--   repo: local
+  - repo: local
     hooks:
-    -   id: gitleaks
+      - id: gitleaks
         name: gitleaks
         language: system
         entry: gitleaks protect --staged -v -c ../.gitleaks.toml
diff --git a/app/common_test.ts b/app/common_test.ts
index 7ba474bef52e1560caccbe46369005dbdb2a9475..08986ab6d4228edcc8036b8e12c9a1148298bf89 100644
--- a/app/common_test.ts
+++ b/app/common_test.ts
@@ -1,36 +1,36 @@
-import { returnsNext, stub } from "./dev_deps.ts";
-import { GraphQLServer } from "./server.ts";
+import { returnsNext, stub } from './dev_deps.ts'
+import { GraphQLServer } from './server.ts'
 
-export type ResponsePayload = Record<string, unknown> | Error;
+export type ResponsePayload = Record<string, unknown> | Error
 
 export const stubFetch = (response: ResponsePayload) => {
   return stub(
     globalThis,
-    "fetch",
+    'fetch',
     returnsNext([Promise.resolve(new Response(JSON.stringify(response)))]),
-  );
-};
+  )
+}
 
 export const processGqlRequest = (
   graphQLServer: GraphQLServer,
   query: string,
   variables: Record<string, unknown> = {},
 ): Promise<Record<string, unknown> | undefined | null> => {
-  const request = new Request("http://localhost:8003/graphql", {
-    method: "POST",
+  const request = new Request('http://localhost:8003/graphql', {
+    method: 'POST',
     headers: {
-      "content-type": "application/json",
-      "accept": "*/*",
+      'content-type': 'application/json',
+      'accept': '*/*',
     },
     body: JSON.stringify({
       operationName: null,
       variables: variables,
       query: query,
     }),
-  });
+  })
   return graphQLServer.handleRequest(request)
     // deno-lint-ignore no-explicit-any
     .then((response: any) => response.json())
     // deno-lint-ignore no-explicit-any
-    .then((response: any) => response.data);
-};
+    .then((response: any) => response.data)
+}
diff --git a/app/deps.ts b/app/deps.ts
index 94cdc3f812b7be295f5f1b60f4e55717f166378e..3b565c6e48fcdb1ee3cded672f6f8f447b24f16a 100644
--- a/app/deps.ts
+++ b/app/deps.ts
@@ -1,7 +1,4 @@
-export { serve } from "https://deno.land/std@0.165.0/http/server.ts";
-export {
-  createSchema,
-  createYoga,
-} from "https://cdn.skypack.dev/graphql-yoga@3.0.3";
-export { useResponseCache } from "https://cdn.skypack.dev/@graphql-yoga/plugin-response-cache@1.0.3";
-export { Parser } from "https://deno.land/x/html_parser@v0.1.3/src/mod.ts";
+export { serve } from 'https://deno.land/std@0.165.0/http/server.ts'
+export { createSchema, createYoga } from 'https://cdn.skypack.dev/graphql-yoga@3.0.3'
+export { useResponseCache } from 'https://cdn.skypack.dev/@graphql-yoga/plugin-response-cache@1.0.3'
+export { Parser } from 'https://deno.land/x/html_parser@v0.1.3/src/mod.ts'
diff --git a/app/dev_deps.ts b/app/dev_deps.ts
index 558b6bdf398cb478eaf3b95710c033e3b259d4e1..f30f85aceaee588c58524ab7eef8caef4e4ba07a 100644
--- a/app/dev_deps.ts
+++ b/app/dev_deps.ts
@@ -1,15 +1,7 @@
-export {
-  assertSpyCall,
-  returnsNext,
-  stub,
-} from "https://deno.land/std@0.165.0/testing/mock.ts";
+export { assertSpyCall, returnsNext, stub } from 'https://deno.land/std@0.165.0/testing/mock.ts'
 
-export type { Stub } from "https://deno.land/std@0.165.0/testing/mock.ts";
+export type { Stub } from 'https://deno.land/std@0.165.0/testing/mock.ts'
 
-export { assertEquals } from "https://deno.land/std@0.165.0/testing/asserts.ts";
+export { assertEquals } from 'https://deno.land/std@0.165.0/testing/asserts.ts'
 
-export {
-  afterEach,
-  describe,
-  it,
-} from "https://deno.land/std@0.165.0/testing/bdd.ts";
+export { afterEach, describe, it } from 'https://deno.land/std@0.165.0/testing/bdd.ts'
diff --git a/app/geoapify.ts b/app/geoapify.ts
index 0737a9c9c3775485c106dfeeab818a7b8cc828f2..36e28f178f95ed62870bb18c92fbdece912e404c 100644
--- a/app/geoapify.ts
+++ b/app/geoapify.ts
@@ -1,17 +1,8 @@
-import {
-  Place,
-  PlaceDetails,
-  PlacesAutocompleteParameters,
-  PlacesDetailsParameters,
-} from "./types.ts";
-import { logger } from "./logging.ts";
-import {
-  GeoapifyAutocompleteResult,
-  GeoapifyFilters,
-  GeoapifyPlaceDetailsResult,
-} from "./geoapify_api_types.ts";
+import { Place, PlaceDetails, PlacesAutocompleteParameters, PlacesDetailsParameters } from './types.ts'
+import { logger } from './logging.ts'
+import { GeoapifyAutocompleteResult, GeoapifyFilters, GeoapifyPlaceDetailsResult } from './geoapify_api_types.ts'
 
-const GEOAPIFY_BASE_URL = "https://api.geoapify.com";
+const GEOAPIFY_BASE_URL = 'https://api.geoapify.com'
 
 const buildPlacesAutocompleteUrl = (
   { text, limit = GeoapifyFilters.LIMIT, level }: PlacesAutocompleteParameters,
@@ -20,20 +11,20 @@ const buildPlacesAutocompleteUrl = (
 ): URL => {
   const url = new URL(
     `${GEOAPIFY_BASE_URL}/v1/geocode/autocomplete`,
-  );
-  url.searchParams.append("text", text);
-  url.searchParams.append("limit", limit.toString());
-  url.searchParams.append("format", GeoapifyFilters.FORMAT);
-  url.searchParams.append("lang", language);
-  url.searchParams.append("bias", GeoapifyFilters.BIAS);
-  url.searchParams.append("apiKey", geoapifyApiKey);
+  )
+  url.searchParams.append('text', text)
+  url.searchParams.append('limit', limit.toString())
+  url.searchParams.append('format', GeoapifyFilters.FORMAT)
+  url.searchParams.append('lang', language)
+  url.searchParams.append('bias', GeoapifyFilters.BIAS)
+  url.searchParams.append('apiKey', geoapifyApiKey)
 
   if (level) {
-    url.searchParams.append("type", level);
+    url.searchParams.append('type', level)
   }
 
-  return url;
-};
+  return url
+}
 
 export const transformAutocompleteResults = (
   { results = [] }: GeoapifyAutocompleteResult,
@@ -48,8 +39,8 @@ export const transformAutocompleteResults = (
       latitude: place.lat,
       longitude: place.lon,
     },
-  }));
-};
+  }))
+}
 
 const buildPlaceDetailsUrl = (
   id: string,
@@ -58,27 +49,27 @@ const buildPlaceDetailsUrl = (
 ): URL => {
   const url = new URL(
     `${GEOAPIFY_BASE_URL}/v2/place-details`,
-  );
-  url.searchParams.append("id", id);
-  url.searchParams.append("lang", language);
-  url.searchParams.append("apiKey", geoapifyApiKey);
+  )
+  url.searchParams.append('id', id)
+  url.searchParams.append('lang', language)
+  url.searchParams.append('apiKey', geoapifyApiKey)
 
-  return url;
-};
+  return url
+}
 
 const transformPlaceDetailsResults = (
   placeDetails: GeoapifyPlaceDetailsResult,
 ): PlaceDetails | undefined => {
   if (!placeDetails.features.length) {
-    throw new Error("No details found for place");
+    throw new Error('No details found for place')
   }
-  const feature = placeDetails.features[0];
+  const feature = placeDetails.features[0]
   return {
     id: feature.properties.place_id,
     name: feature.properties.formatted,
     geolocation: feature,
-  };
-};
+  }
+}
 
 export const fetchPlaces = (
   params: PlacesAutocompleteParameters,
@@ -89,25 +80,25 @@ export const fetchPlaces = (
     params,
     language,
     geoapifyApiKey,
-  );
-  const start = Date.now();
-  logger.info(`fetching places for search input ${params.text}`);
+  )
+  const start = Date.now()
+  logger.info(`fetching places for search input ${params.text}`)
   return fetch(url)
     .then((result) => result.json())
     .then(transformAutocompleteResults)
     .then((result) => {
-      const duration = Date.now() - start;
-      logger.debug(`fetching places took ${duration} ms`);
-      return result;
+      const duration = Date.now() - start
+      logger.debug(`fetching places took ${duration} ms`)
+      return result
     })
     .catch((e) => {
-      const duration = Date.now() - start;
+      const duration = Date.now() - start
       logger.error(
         `Error performing request to ${url} after ${duration} ms: ${e.message}`,
-      );
-      throw e;
-    });
-};
+      )
+      throw e
+    })
+}
 
 export const fetchPlaceDetails = (
   { id }: PlacesDetailsParameters,
@@ -118,22 +109,22 @@ export const fetchPlaceDetails = (
     id,
     language,
     geoapifyApiKey,
-  );
-  const start = Date.now();
-  logger.info(`fetching place details for place id ${id}`);
+  )
+  const start = Date.now()
+  logger.info(`fetching place details for place id ${id}`)
   return fetch(url)
     .then((result) => result.json())
     .then(transformPlaceDetailsResults)
     .then((result) => {
-      const duration = Date.now() - start;
-      logger.debug(`fetching places took ${duration} ms`);
-      return result;
+      const duration = Date.now() - start
+      logger.debug(`fetching places took ${duration} ms`)
+      return result
     })
     .catch((e) => {
-      const duration = Date.now() - start;
+      const duration = Date.now() - start
       logger.error(
         `Error performing request to ${url} after ${duration} ms: ${e.message}`,
-      );
-      throw e;
-    });
-};
+      )
+      throw e
+    })
+}
diff --git a/app/geoapify_api_types.ts b/app/geoapify_api_types.ts
index 27a71c14c6de82260e0d59286d05595d535f18e3..7e22c16ef40cb22183800c87ca27d5eec2919fbc 100644
--- a/app/geoapify_api_types.ts
+++ b/app/geoapify_api_types.ts
@@ -1,36 +1,36 @@
 export type GeoapifyPlace = {
-  place_id: string;
-  formatted: string;
-  city?: string;
-  state?: string;
-  country: string;
-  lon: number;
-  lat: number;
-};
+  place_id: string
+  formatted: string
+  city?: string
+  state?: string
+  country: string
+  lon: number
+  lat: number
+}
 
 export type GeoapifyGeometry = {
-  type: string;
-  coordinates: number[] | number[][] | number[][][] | number[][][][];
-};
+  type: string
+  coordinates: number[] | number[][] | number[][][] | number[][][][]
+}
 
 export type GeoapifyPlaceDetails = {
   properties: {
-    place_id: string;
-    formatted: string;
-  };
-  geometry: GeoapifyGeometry;
-};
+    place_id: string
+    formatted: string
+  }
+  geometry: GeoapifyGeometry
+}
 
 export type GeoapifyAutocompleteResult = {
-  results: GeoapifyPlace[];
-};
+  results: GeoapifyPlace[]
+}
 
 export type GeoapifyPlaceDetailsResult = {
-  features: GeoapifyPlaceDetails[];
-};
+  features: GeoapifyPlaceDetails[]
+}
 
 export enum GeoapifyFilters {
   LIMIT = 3,
-  FORMAT = "json",
-  BIAS = "countrycode:de",
+  FORMAT = 'json',
+  BIAS = 'countrycode:de',
 }
diff --git a/app/geoapify_test.ts b/app/geoapify_test.ts
index b063f540d2bc770e34040e0050dac96cd5d0f9a1..0bc7ca8022666b8ec3068c278dfb578d96f6ab36 100644
--- a/app/geoapify_test.ts
+++ b/app/geoapify_test.ts
@@ -1,13 +1,6 @@
-import {
-  afterEach,
-  assertEquals,
-  assertSpyCall,
-  describe,
-  it,
-  Stub,
-} from "./dev_deps.ts";
-import { processGqlRequest, stubFetch } from "./common_test.ts";
-import { fetchPlaces } from "./geoapify.ts";
+import { afterEach, assertEquals, assertSpyCall, describe, it, Stub } from './dev_deps.ts'
+import { processGqlRequest, stubFetch } from './common_test.ts'
+import { fetchPlaces } from './geoapify.ts'
 import {
   expectedPlaceDetailsGqlResponse,
   expectedPlaceDetailsGqlResponseSinglePolygon,
@@ -16,22 +9,22 @@ import {
   geoapifyPlaceDetailsNotFound,
   geoapifyPlaceDetailsResponse,
   geoapifyPlaceDetailsResponseSinglePolygon,
-} from "./geoapify_test_data.ts";
+} from './geoapify_test_data.ts'
 
-import { DEFAULT_LANGUAGE, Place, PlaceDetails } from "./types.ts";
-import { createGraphQLServer, GraphQLServer } from "./server.ts";
+import { DEFAULT_LANGUAGE, Place, PlaceDetails } from './types.ts'
+import { createGraphQLServer, GraphQLServer } from './server.ts'
 
 const noCacheServerConfig = {
   port: 0,
   cacheEnabled: false,
   cacheTtlMsPlacesAutocomplete: 0,
-  geoapifyApiKey: "",
+  geoapifyApiKey: '',
   fake: false,
-};
+}
 
 const emptyResponse = {
   predictions: [],
-};
+}
 
 const placeFragment = `
   id
@@ -43,13 +36,13 @@ const placeFragment = `
     latitude
     longitude
   }
-`;
+`
 
 const placeDetailsFragment = `
   id
   name
   geolocation
-`;
+`
 
 const placesAutocompleteQuery = (text: string) => `
 {
@@ -57,7 +50,7 @@ const placesAutocompleteQuery = (text: string) => `
     ${placeFragment}
   }
 }
-`;
+`
 
 const placeDetailsQuery = (id: string) => `
 {
@@ -65,100 +58,100 @@ const placeDetailsQuery = (id: string) => `
     ${placeDetailsFragment}
   }
 }
-`;
+`
 
 const queryPlaces = async (
   graphQLServer: GraphQLServer,
   query: string,
 ): Promise<Place[]> => {
   return (await processGqlRequest(graphQLServer, query))
-    ?.placesAutocomplete as Place[];
-};
+    ?.placesAutocomplete as Place[]
+}
 
 const queryPlaceDetails = async (
   graphQLServer: GraphQLServer,
   query: string,
 ): Promise<PlaceDetails> => {
   return (await processGqlRequest(graphQLServer, query))
-    ?.placeDetails as PlaceDetails;
-};
+    ?.placeDetails as PlaceDetails
+}
 
-describe("places", () => {
-  let fetchStub: Stub;
+describe('places', () => {
+  let fetchStub: Stub
 
   afterEach(() => {
-    fetchStub?.restore();
-  });
+    fetchStub?.restore()
+  })
 
-  it("calls api with correct parameters", async () => {
-    fetchStub = stubFetch(emptyResponse);
+  it('calls api with correct parameters', async () => {
+    fetchStub = stubFetch(emptyResponse)
 
-    const placesApiKey = "random_string";
+    const placesApiKey = 'random_string'
 
     await fetchPlaces(
-      { text: "Munich" },
+      { text: 'Munich' },
       DEFAULT_LANGUAGE,
       placesApiKey,
-    );
+    )
 
     const expectedUrl = new URL(
       `https://api.geoapify.com/v1/geocode/autocomplete?text=Munich&limit=3&format=json&lang=en&bias=countrycode%3Ade&apiKey=${placesApiKey}`,
-    );
-    assertSpyCall(fetchStub, 0, { args: [expectedUrl] });
-  });
+    )
+    assertSpyCall(fetchStub, 0, { args: [expectedUrl] })
+  })
 
-  it("correctly parses result and returns", async () => {
-    fetchStub = stubFetch(geoapifyAutocompleteResponse);
-    const graphQLServer = createGraphQLServer(noCacheServerConfig);
+  it('correctly parses result and returns', async () => {
+    fetchStub = stubFetch(geoapifyAutocompleteResponse)
+    const graphQLServer = createGraphQLServer(noCacheServerConfig)
     const places = await queryPlaces(
       graphQLServer,
-      placesAutocompleteQuery("Munich"),
-    );
-    assertEquals(places, expectedPlacesAutocompleteGqlResponse);
-  });
-});
+      placesAutocompleteQuery('Munich'),
+    )
+    assertEquals(places, expectedPlacesAutocompleteGqlResponse)
+  })
+})
 
-describe("placeDetails", () => {
-  let fetchStub: Stub;
+describe('placeDetails', () => {
+  let fetchStub: Stub
 
   afterEach(() => {
-    fetchStub?.restore();
-  });
+    fetchStub?.restore()
+  })
 
-  it("correctly parses result and returns", async () => {
-    fetchStub = stubFetch(geoapifyPlaceDetailsResponse);
-    const graphQLServer = createGraphQLServer(noCacheServerConfig);
+  it('correctly parses result and returns', async () => {
+    fetchStub = stubFetch(geoapifyPlaceDetailsResponse)
+    const graphQLServer = createGraphQLServer(noCacheServerConfig)
     const placeDetails = await queryPlaceDetails(
       graphQLServer,
       placeDetailsQuery(
-        "51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e",
+        '51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e',
       ),
-    );
-    assertEquals(placeDetails, expectedPlaceDetailsGqlResponse);
-  });
+    )
+    assertEquals(placeDetails, expectedPlaceDetailsGqlResponse)
+  })
 
-  it("correctly parses result and transforms response for single polygon", async () => {
-    fetchStub = stubFetch(geoapifyPlaceDetailsResponseSinglePolygon);
-    const graphQLServer = createGraphQLServer(noCacheServerConfig);
+  it('correctly parses result and transforms response for single polygon', async () => {
+    fetchStub = stubFetch(geoapifyPlaceDetailsResponseSinglePolygon)
+    const graphQLServer = createGraphQLServer(noCacheServerConfig)
     const placeDetails = await queryPlaceDetails(
       graphQLServer,
       placeDetailsQuery(
-        "51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e",
+        '51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e',
       ),
-    );
-    assertEquals(placeDetails, expectedPlaceDetailsGqlResponseSinglePolygon);
-  });
+    )
+    assertEquals(placeDetails, expectedPlaceDetailsGqlResponseSinglePolygon)
+  })
 
-  it("throws error if no details were found", async () => {
-    fetchStub = stubFetch(geoapifyPlaceDetailsNotFound);
-    const graphQLServer = createGraphQLServer(noCacheServerConfig);
+  it('throws error if no details were found', async () => {
+    fetchStub = stubFetch(geoapifyPlaceDetailsNotFound)
+    const graphQLServer = createGraphQLServer(noCacheServerConfig)
 
     const response = await queryPlaceDetails(
       graphQLServer,
       placeDetailsQuery(
-        "51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e",
+        '51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e',
       ),
-    );
-    assertEquals(response, undefined);
-  });
-});
+    )
+    assertEquals(response, undefined)
+  })
+})
diff --git a/app/geoapify_test_data.ts b/app/geoapify_test_data.ts
index 04ed3dafebe2e429443763607edc48a20ac60445..973151e98de78962ce2d677cbaff8c18374e1cf6 100644
--- a/app/geoapify_test_data.ts
+++ b/app/geoapify_test_data.ts
@@ -1,118 +1,116 @@
 export const geoapifyAutocompleteResponse = {
-  "results": [
+  'results': [
     {
-      "datasource": {
-        "sourcename": "openstreetmap",
-        "attribution": "© OpenStreetMap contributors",
-        "license": "Open Database License",
-        "url": "https://www.openstreetmap.org/copyright",
+      'datasource': {
+        'sourcename': 'openstreetmap',
+        'attribution': '© OpenStreetMap contributors',
+        'license': 'Open Database License',
+        'url': 'https://www.openstreetmap.org/copyright',
       },
-      "country": "Germany",
-      "country_code": "de",
-      "state": "Bavaria",
-      "city": "Munich",
-      "lon": 11.5753822,
-      "lat": 48.1371079,
-      "formatted": "Munich, Bavaria, Germany",
-      "address_line1": "Munich",
-      "address_line2": "Bavaria, Germany",
-      "category": "administrative",
-      "timezone": {
-        "name": "Europe/Berlin",
-        "offset_STD": "+01:00",
-        "offset_STD_seconds": 3600,
-        "offset_DST": "+02:00",
-        "offset_DST_seconds": 7200,
-        "abbreviation_STD": "CET",
-        "abbreviation_DST": "CEST",
+      'country': 'Germany',
+      'country_code': 'de',
+      'state': 'Bavaria',
+      'city': 'Munich',
+      'lon': 11.5753822,
+      'lat': 48.1371079,
+      'formatted': 'Munich, Bavaria, Germany',
+      'address_line1': 'Munich',
+      'address_line2': 'Bavaria, Germany',
+      'category': 'administrative',
+      'timezone': {
+        'name': 'Europe/Berlin',
+        'offset_STD': '+01:00',
+        'offset_STD_seconds': 3600,
+        'offset_DST': '+02:00',
+        'offset_DST_seconds': 7200,
+        'abbreviation_STD': 'CET',
+        'abbreviation_DST': 'CEST',
       },
-      "result_type": "city",
-      "rank": {
-        "importance": 0.7462108837044543,
-        "confidence": 1,
-        "confidence_city_level": 1,
-        "match_type": "full_match",
+      'result_type': 'city',
+      'rank': {
+        'importance': 0.7462108837044543,
+        'confidence': 1,
+        'confidence_city_level': 1,
+        'match_type': 'full_match',
       },
-      "place_id":
-        "51ac66e77e9826274059f9426dc08c114840f00101f901dcf3000000000000c00208",
-      "bbox": {
-        "lon1": 11.360777,
-        "lat1": 48.0616244,
-        "lon2": 11.7229099,
-        "lat2": 48.2481162,
+      'place_id': '51ac66e77e9826274059f9426dc08c114840f00101f901dcf3000000000000c00208',
+      'bbox': {
+        'lon1': 11.360777,
+        'lat1': 48.0616244,
+        'lon2': 11.7229099,
+        'lat2': 48.2481162,
       },
     },
     {
-      "datasource": {
-        "sourcename": "openstreetmap",
-        "attribution": "© OpenStreetMap contributors",
-        "license": "Open Database License",
-        "url": "https://www.openstreetmap.org/copyright",
+      'datasource': {
+        'sourcename': 'openstreetmap',
+        'attribution': '© OpenStreetMap contributors',
+        'license': 'Open Database License',
+        'url': 'https://www.openstreetmap.org/copyright',
       },
-      "country": "United States",
-      "country_code": "us",
-      "state": "North Dakota",
-      "county": "Cavalier County",
-      "city": "Munich",
-      "lon": -98.832631,
-      "lat": 48.669174,
-      "state_code": "ND",
-      "formatted": "Munich, ND, United States of America",
-      "address_line1": "Munich, ND",
-      "address_line2": "United States of America",
-      "category": "administrative",
-      "timezone": {
-        "name": "America/Chicago",
-        "offset_STD": "-06:00",
-        "offset_STD_seconds": -21600,
-        "offset_DST": "-05:00",
-        "offset_DST_seconds": -18000,
-        "abbreviation_STD": "CST",
-        "abbreviation_DST": "CDT",
+      'country': 'United States',
+      'country_code': 'us',
+      'state': 'North Dakota',
+      'county': 'Cavalier County',
+      'city': 'Munich',
+      'lon': -98.832631,
+      'lat': 48.669174,
+      'state_code': 'ND',
+      'formatted': 'Munich, ND, United States of America',
+      'address_line1': 'Munich, ND',
+      'address_line2': 'United States of America',
+      'category': 'administrative',
+      'timezone': {
+        'name': 'America/Chicago',
+        'offset_STD': '-06:00',
+        'offset_STD_seconds': -21600,
+        'offset_DST': '-05:00',
+        'offset_DST_seconds': -18000,
+        'abbreviation_STD': 'CST',
+        'abbreviation_DST': 'CDT',
       },
-      "result_type": "city",
-      "rank": {
-        "importance": 0.38934201687536324,
-        "confidence": 1,
-        "confidence_city_level": 1,
-        "match_type": "full_match",
+      'result_type': 'city',
+      'rank': {
+        'importance': 0.38934201687536324,
+        'confidence': 1,
+        'confidence_city_level': 1,
+        'match_type': 'full_match',
       },
-      "place_id":
-        "51b1a888d349b558c059b0aa5e7ea7554840f00101f90194c5020000000000c00208",
-      "bbox": {
-        "lon1": -98.840098,
-        "lat1": 48.663316,
-        "lon2": -98.824089,
-        "lat2": 48.676126,
+      'place_id': '51b1a888d349b558c059b0aa5e7ea7554840f00101f90194c5020000000000c00208',
+      'bbox': {
+        'lon1': -98.840098,
+        'lat1': 48.663316,
+        'lon2': -98.824089,
+        'lat2': 48.676126,
       },
     },
   ],
-};
+}
 
 export const expectedPlacesAutocompleteGqlResponse = [
   {
-    id: "51ac66e77e9826274059f9426dc08c114840f00101f901dcf3000000000000c00208",
-    name: "Munich, Bavaria, Germany",
-    city: "Munich",
-    state: "Bavaria",
-    country: "Germany",
+    id: '51ac66e77e9826274059f9426dc08c114840f00101f901dcf3000000000000c00208',
+    name: 'Munich, Bavaria, Germany',
+    city: 'Munich',
+    state: 'Bavaria',
+    country: 'Germany',
     coordinates: {
       latitude: 48.1371079,
       longitude: 11.5753822,
     },
   },
   {
-    id: "51b1a888d349b558c059b0aa5e7ea7554840f00101f90194c5020000000000c00208",
-    name: "Munich, ND, United States of America",
-    city: "Munich",
-    state: "North Dakota",
-    country: "United States",
+    id: '51b1a888d349b558c059b0aa5e7ea7554840f00101f90194c5020000000000c00208',
+    name: 'Munich, ND, United States of America',
+    city: 'Munich',
+    state: 'North Dakota',
+    country: 'United States',
     coordinates: {
       latitude: 48.669174,
       longitude: -98.832631,
     },
   },
-];
+]
 
 const placeDetailCoordinates = [
   [
@@ -2275,209 +2273,207 @@ const placeDetailCoordinates = [
       ],
     ],
   ],
-];
+]
 
 const placeFeature = {
-  "type": "Feature",
-  "properties": {
-    "feature_type": "details",
-    "website": "https://www.muenchen.de/",
-    "website_other": [
-      "https://www.muenchen.de",
+  'type': 'Feature',
+  'properties': {
+    'feature_type': 'details',
+    'website': 'https://www.muenchen.de/',
+    'website_other': [
+      'https://www.muenchen.de',
     ],
-    "name": "München",
-    "name_international": {
-      "bs": "Minhen",
-      "ca": "Munic",
-      "cs": "Mnichov",
-      "de": "München",
-      "el": "Μόναχο",
-      "en": "Munich",
-      "es": "Múnich",
-      "fa": "مونیخ",
-      "fr": "Munich",
-      "fy": "München",
-      "it": "Monaco",
-      "ko": "뮌헨",
-      "mk": "Минхен",
-      "nl": "München",
-      "ru": "Мюнхен",
-      "sk": "Mníchov",
-      "ta": "மியூனிக்",
-      "tr": "Münih",
-      "uk": "Мюнхен",
-      "ur": "میونخ",
+    'name': 'München',
+    'name_international': {
+      'bs': 'Minhen',
+      'ca': 'Munic',
+      'cs': 'Mnichov',
+      'de': 'München',
+      'el': 'Μόναχο',
+      'en': 'Munich',
+      'es': 'Múnich',
+      'fa': 'مونیخ',
+      'fr': 'Munich',
+      'fy': 'München',
+      'it': 'Monaco',
+      'ko': '뮌헨',
+      'mk': 'Минхен',
+      'nl': 'München',
+      'ru': 'Мюнхен',
+      'sk': 'Mníchov',
+      'ta': 'மியூனிக்',
+      'tr': 'Münih',
+      'uk': 'Мюнхен',
+      'ur': 'میونخ',
     },
-    "contact": {
-      "phone": "+49 89 115",
+    'contact': {
+      'phone': '+49 89 115',
     },
-    "wiki_and_media": {
-      "wikidata": "Q1726",
-      "wikipedia": "de:München",
+    'wiki_and_media': {
+      'wikidata': 'Q1726',
+      'wikipedia': 'de:München',
     },
-    "categories": [
-      "administrative",
-      "administrative.county_level",
+    'categories': [
+      'administrative',
+      'administrative.county_level',
     ],
-    "datasource": {
-      "sourcename": "openstreetmap",
-      "attribution": "© OpenStreetMap contributors",
-      "license": "Open Database Licence",
-      "url": "https://www.openstreetmap.org/copyright",
-      "raw": {
-        "ele": 519,
-        "name": "München",
-        "type": "boundary",
-        "phone": "+49 89 115",
-        "osm_id": -62428,
-        "capital": 4,
-        "name:bs": "Minhen",
-        "name:ca": "Munic",
-        "name:cs": "Mnichov",
-        "name:de": "München",
-        "name:el": "Μόναχο",
-        "name:en": "Munich",
-        "name:es": "Múnich",
-        "name:fa": "مونیخ",
-        "name:fr": "Munich",
-        "name:fy": "München",
-        "name:it": "Monaco",
-        "name:ko": "뮌헨",
-        "name:mk": "Минхен",
-        "name:nl": "München",
-        "name:ru": "Мюнхен",
-        "name:sk": "Mníchov",
-        "name:ta": "மியூனிக்",
-        "name:tr": "Münih",
-        "name:uk": "Мюнхен",
-        "name:ur": "میونخ",
-        "website": "https://www.muenchen.de/",
-        "boundary": "administrative",
-        "de:place": "city",
-        "name:tzl": "Müntsch",
-        "osm_type": "r",
-        "wikidata": "Q1726",
-        "wikipedia": "de:München",
-        "population": 1484226,
-        "ref:LOCODE": "DEMUC",
-        "ref:nuts:3": "DE212",
-        "admin_level": 6,
-        "attribution": "Open Data LH München 2017",
-        "name:prefix": "Landeshauptstadt",
-        "old_name:sl": "Monakovo",
-        "country_code": "de",
-        "linked_place": "city",
-        "contact:phone": "+49 89 115",
-        "_place_name:ar": "ميونخ",
-        "_place_name:az": "Münhen",
-        "_place_name:be": "Мюнхен",
-        "_place_name:bg": "Мюнхен",
-        "_place_name:da": "München",
-        "_place_name:eo": "Munkeno",
-        "_place_name:eu": "Munich",
-        "_place_name:fi": "München",
-        "_place_name:gl": "Múnic",
-        "_place_name:he": "מינכן",
-        "_place_name:hi": "म्यूनिख",
-        "_place_name:hr": "München",
-        "_place_name:hy": "Õ„ÕµÕ¸Ö‚Õ¶Õ­Õ¥Õ¶",
-        "_place_name:it": "Monaco di Baviera",
-        "_place_name:ja": "ミュンヘン",
-        "_place_name:ka": "მიუნხენი",
-        "_place_name:kk": "Мюнхен",
-        "_place_name:kn": "ಮುನಿಕ್",
-        "_place_name:la": "Monacum",
-        "_place_name:lt": "Miunchenas",
-        "_place_name:lv": "Minhene",
-        "_place_name:oc": "Munic",
-        "_place_name:pl": "Monachium",
-        "_place_name:pt": "Munique",
-        "_place_name:sh": "München",
-        "_place_name:sr": "Минхен",
-        "_place_name:tt": "Мүнхен",
-        "_place_name:uz": "Munhen",
-        "_place_name:vi": "München",
-        "_place_name:zh": "慕尼黑",
-        "openGeoDB:type": "Landeshauptstadt",
-        "_place_int_name": "Munich",
-        "_place_name:als": "Münche",
-        "_place_name:bar": "Minga",
-        "_place_name:dsb": "München",
-        "_place_name:hsb": "Mnichow",
-        "contact:website": "https://www.muenchen.de",
-        "openGeoDB:loc_id": 212,
-        "_place_alt_name:la": "Monachium;Monachum",
-        "license_plate_code": "M",
-        "_place_name:zh-Hant": "慕尼黑",
-        "_place_name:be-tarask": "Мюнхэн",
-        "de:regionalschluessel": "091620000000",
-        "TMC:cid_58:tabcd_1:Class": "Area",
-        "openGeoDB:license_plate_code": "M",
-        "TMC:cid_58:tabcd_1:LCLversion": 8,
-        "openGeoDB:telephone_area_code": "089",
-        "TMC:cid_58:tabcd_1:LocationCode": 1956,
-        "de:amtlicher_gemeindeschluessel": "09162000",
-        "openGeoDB:community_identification_number": "09162",
+    'datasource': {
+      'sourcename': 'openstreetmap',
+      'attribution': '© OpenStreetMap contributors',
+      'license': 'Open Database Licence',
+      'url': 'https://www.openstreetmap.org/copyright',
+      'raw': {
+        'ele': 519,
+        'name': 'München',
+        'type': 'boundary',
+        'phone': '+49 89 115',
+        'osm_id': -62428,
+        'capital': 4,
+        'name:bs': 'Minhen',
+        'name:ca': 'Munic',
+        'name:cs': 'Mnichov',
+        'name:de': 'München',
+        'name:el': 'Μόναχο',
+        'name:en': 'Munich',
+        'name:es': 'Múnich',
+        'name:fa': 'مونیخ',
+        'name:fr': 'Munich',
+        'name:fy': 'München',
+        'name:it': 'Monaco',
+        'name:ko': '뮌헨',
+        'name:mk': 'Минхен',
+        'name:nl': 'München',
+        'name:ru': 'Мюнхен',
+        'name:sk': 'Mníchov',
+        'name:ta': 'மியூனிக்',
+        'name:tr': 'Münih',
+        'name:uk': 'Мюнхен',
+        'name:ur': 'میونخ',
+        'website': 'https://www.muenchen.de/',
+        'boundary': 'administrative',
+        'de:place': 'city',
+        'name:tzl': 'Müntsch',
+        'osm_type': 'r',
+        'wikidata': 'Q1726',
+        'wikipedia': 'de:München',
+        'population': 1484226,
+        'ref:LOCODE': 'DEMUC',
+        'ref:nuts:3': 'DE212',
+        'admin_level': 6,
+        'attribution': 'Open Data LH München 2017',
+        'name:prefix': 'Landeshauptstadt',
+        'old_name:sl': 'Monakovo',
+        'country_code': 'de',
+        'linked_place': 'city',
+        'contact:phone': '+49 89 115',
+        '_place_name:ar': 'ميونخ',
+        '_place_name:az': 'Münhen',
+        '_place_name:be': 'Мюнхен',
+        '_place_name:bg': 'Мюнхен',
+        '_place_name:da': 'München',
+        '_place_name:eo': 'Munkeno',
+        '_place_name:eu': 'Munich',
+        '_place_name:fi': 'München',
+        '_place_name:gl': 'Múnic',
+        '_place_name:he': 'מינכן',
+        '_place_name:hi': 'म्यूनिख',
+        '_place_name:hr': 'München',
+        '_place_name:hy': 'Õ„ÕµÕ¸Ö‚Õ¶Õ­Õ¥Õ¶',
+        '_place_name:it': 'Monaco di Baviera',
+        '_place_name:ja': 'ミュンヘン',
+        '_place_name:ka': 'მიუნხენი',
+        '_place_name:kk': 'Мюнхен',
+        '_place_name:kn': 'ಮುನಿಕ್',
+        '_place_name:la': 'Monacum',
+        '_place_name:lt': 'Miunchenas',
+        '_place_name:lv': 'Minhene',
+        '_place_name:oc': 'Munic',
+        '_place_name:pl': 'Monachium',
+        '_place_name:pt': 'Munique',
+        '_place_name:sh': 'München',
+        '_place_name:sr': 'Минхен',
+        '_place_name:tt': 'Мүнхен',
+        '_place_name:uz': 'Munhen',
+        '_place_name:vi': 'München',
+        '_place_name:zh': '慕尼黑',
+        'openGeoDB:type': 'Landeshauptstadt',
+        '_place_int_name': 'Munich',
+        '_place_name:als': 'Münche',
+        '_place_name:bar': 'Minga',
+        '_place_name:dsb': 'München',
+        '_place_name:hsb': 'Mnichow',
+        'contact:website': 'https://www.muenchen.de',
+        'openGeoDB:loc_id': 212,
+        '_place_alt_name:la': 'Monachium;Monachum',
+        'license_plate_code': 'M',
+        '_place_name:zh-Hant': '慕尼黑',
+        '_place_name:be-tarask': 'Мюнхэн',
+        'de:regionalschluessel': '091620000000',
+        'TMC:cid_58:tabcd_1:Class': 'Area',
+        'openGeoDB:license_plate_code': 'M',
+        'TMC:cid_58:tabcd_1:LCLversion': 8,
+        'openGeoDB:telephone_area_code': '089',
+        'TMC:cid_58:tabcd_1:LocationCode': 1956,
+        'de:amtlicher_gemeindeschluessel': '09162000',
+        'openGeoDB:community_identification_number': '09162',
       },
     },
-    "city": "Munich",
-    "state": "Bavaria",
-    "country": "Germany",
-    "country_code": "de",
-    "formatted": "München, Munich, Bavaria, Germany",
-    "address_line1": "München",
-    "address_line2": "Munich, Bavaria, Germany",
-    "lat": 48.1371079,
-    "lon": 11.5753822,
-    "timezone": {
-      "name": "Europe/Berlin",
-      "offset_STD": "+01:00",
-      "offset_STD_seconds": 3600,
-      "offset_DST": "+02:00",
-      "offset_DST_seconds": 7200,
-      "abbreviation_STD": "CET",
-      "abbreviation_DST": "CEST",
+    'city': 'Munich',
+    'state': 'Bavaria',
+    'country': 'Germany',
+    'country_code': 'de',
+    'formatted': 'München, Munich, Bavaria, Germany',
+    'address_line1': 'München',
+    'address_line2': 'Munich, Bavaria, Germany',
+    'lat': 48.1371079,
+    'lon': 11.5753822,
+    'timezone': {
+      'name': 'Europe/Berlin',
+      'offset_STD': '+01:00',
+      'offset_STD_seconds': 3600,
+      'offset_DST': '+02:00',
+      'offset_DST_seconds': 7200,
+      'abbreviation_STD': 'CET',
+      'abbreviation_DST': 'CEST',
     },
-    "place_id":
-      "51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e",
+    'place_id': '51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e',
   },
-  "geometry": {
-    "type": "MultiPolygon",
-    "coordinates": placeDetailCoordinates,
+  'geometry': {
+    'type': 'MultiPolygon',
+    'coordinates': placeDetailCoordinates,
   },
-};
+}
 
 export const geoapifyPlaceDetailsResponse = {
-  "type": "FeatureCollection",
-  "features": [placeFeature],
-};
+  'type': 'FeatureCollection',
+  'features': [placeFeature],
+}
 
 export const expectedPlaceDetailsGqlResponse = {
-  id:
-    "51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e",
-  name: "München, Munich, Bavaria, Germany",
+  id: '51c69eecf83f18274059dd3ad3f89a134840f00101f901dcf3000000000000c002099203084dc3bc6e6368656e',
+  name: 'München, Munich, Bavaria, Germany',
   geolocation: placeFeature,
-};
+}
 
 const placeFeatureSinglePolygon = {
   ...placeFeature,
-  "geometry": {
-    "type": "Polygon",
-    "coordinates": placeDetailCoordinates[0],
+  'geometry': {
+    'type': 'Polygon',
+    'coordinates': placeDetailCoordinates[0],
   },
-};
+}
 
 export const geoapifyPlaceDetailsResponseSinglePolygon = {
-  "type": "FeatureCollection",
-  "features": [placeFeatureSinglePolygon],
-};
+  'type': 'FeatureCollection',
+  'features': [placeFeatureSinglePolygon],
+}
 
 export const expectedPlaceDetailsGqlResponseSinglePolygon = {
   ...expectedPlaceDetailsGqlResponse,
   geolocation: placeFeatureSinglePolygon,
-};
+}
 
 export const geoapifyPlaceDetailsNotFound = {
-  "type": "FeatureCollection",
-  "features": [],
-};
+  'type': 'FeatureCollection',
+  'features': [],
+}
diff --git a/app/logging.ts b/app/logging.ts
index dcd266055c37924d48e605d73952e821f0386a28..dbd14d224c7e6bfb584f1c659b39297532979e27 100644
--- a/app/logging.ts
+++ b/app/logging.ts
@@ -1,14 +1,14 @@
 // Google Cloud LogSeverity levels https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#logseverity
 export enum LogSeverity {
-  DEFAULT = "DEFAULT",
-  DEBUG = "DEBUG",
-  INFO = "INFO",
-  NOTICE = "NOTICE",
-  WARNING = "WARNING",
-  ERROR = "ERROR",
-  CRITICAL = "CRITICAL",
-  ALERT = "ALERT",
-  EMERGENCY = "EMERGENCY",
+  DEFAULT = 'DEFAULT',
+  DEBUG = 'DEBUG',
+  INFO = 'INFO',
+  NOTICE = 'NOTICE',
+  WARNING = 'WARNING',
+  ERROR = 'ERROR',
+  CRITICAL = 'CRITICAL',
+  ALERT = 'ALERT',
+  EMERGENCY = 'EMERGENCY',
 }
 
 const sortedLevels = [
@@ -21,20 +21,20 @@ const sortedLevels = [
   LogSeverity.CRITICAL,
   LogSeverity.ALERT,
   LogSeverity.EMERGENCY,
-];
+]
 
 /**
  * The Logger class requires a setUpLogger method to be run during the app's initialization in order get the current environment.
  */
 class Logger {
-  environment = "development";
+  environment = 'development'
 
   // minimum level to log
-  level = LogSeverity.DEFAULT;
+  level = LogSeverity.DEFAULT
 
   setUpLogger(environment: string, level: LogSeverity) {
-    this.environment = environment;
-    this.level = level;
+    this.environment = environment
+    this.level = level
   }
 
   /**
@@ -46,50 +46,48 @@ class Logger {
    * In other environments it should follow Google Cloud's Structured Logging formatting: https://cloud.google.com/logging/docs/structured-logging
    */
   log(severity: LogSeverity, message: string, options = {}) {
-    if (!shouldLogLevel(this.level, severity)) return;
+    if (!shouldLogLevel(this.level, severity)) return
 
-    const date = new Date().toISOString();
-    const input = this.environment === "development"
-      ? `${date} ${severity} ${message}`
-      : JSON.stringify({
-        environment: this.environment,
-        severity,
-        message,
-        ...options,
-      });
+    const date = new Date().toISOString()
+    const input = this.environment === 'development' ? `${date} ${severity} ${message}` : JSON.stringify({
+      environment: this.environment,
+      severity,
+      message,
+      ...options,
+    })
 
     switch (severity) {
       case LogSeverity.DEFAULT:
-        console.log(input);
-        break;
+        console.log(input)
+        break
       case LogSeverity.DEBUG:
-        console.debug(input);
-        break;
+        console.debug(input)
+        break
       case LogSeverity.INFO:
       case LogSeverity.NOTICE:
-        console.info(input);
-        break;
+        console.info(input)
+        break
       case LogSeverity.WARNING:
-        console.warn(input);
-        break;
+        console.warn(input)
+        break
       case LogSeverity.ERROR:
       case LogSeverity.CRITICAL:
       case LogSeverity.ALERT:
       case LogSeverity.EMERGENCY:
-        console.error(input);
+        console.error(input)
     }
   }
 
   debug(message: string, options = {}) {
-    this.log(LogSeverity.DEBUG, message, options);
+    this.log(LogSeverity.DEBUG, message, options)
   }
 
   info(message: string, options = {}) {
-    this.log(LogSeverity.INFO, message, options);
+    this.log(LogSeverity.INFO, message, options)
   }
 
   error(message: string, options = {}) {
-    this.log(LogSeverity.ERROR, message, options);
+    this.log(LogSeverity.ERROR, message, options)
   }
 }
 
@@ -99,9 +97,9 @@ class Logger {
  * @returns Boolean, true if the current level is accepted and false if it is rejected by the minLevel
  */
 const shouldLogLevel = (minLevel: LogSeverity, level: LogSeverity) => {
-  const minLevelIndex = sortedLevels.indexOf(minLevel);
-  const currentLevelIndex = sortedLevels.indexOf(level);
-  return currentLevelIndex >= minLevelIndex;
-};
+  const minLevelIndex = sortedLevels.indexOf(minLevel)
+  const currentLevelIndex = sortedLevels.indexOf(level)
+  return currentLevelIndex >= minLevelIndex
+}
 
-export const logger = new Logger();
+export const logger = new Logger()
diff --git a/app/main.ts b/app/main.ts
index 01dbcda4d0cf93028ff3225616320916f5a7e252..1ea55aabce3fe580b7f49ad8b4b761dac347d563 100644
--- a/app/main.ts
+++ b/app/main.ts
@@ -1,54 +1,54 @@
-import { logger, LogSeverity } from "./logging.ts";
+import { logger, LogSeverity } from './logging.ts'
 import {
   DEFAULT_CACHE_ENABLED,
   DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE,
   DEFAULT_PORT,
   startServer,
-} from "./server.ts";
+} from './server.ts'
 
-const environment = Deno.env.get("ENVIRONMENT") || "development";
+const environment = Deno.env.get('ENVIRONMENT') || 'development'
 
 logger.setUpLogger(
   environment,
-  environment === "development" ? LogSeverity.DEFAULT : LogSeverity.INFO,
-);
+  environment === 'development' ? LogSeverity.DEFAULT : LogSeverity.INFO,
+)
 
 const requiredEnv = <T>(
   name: string,
   typeFn: (s: string) => T,
   fallback?: T,
 ): T => {
-  const env = Deno.env.get(name);
+  const env = Deno.env.get(name)
   if (env === undefined && fallback === undefined) {
-    throw Error(`Environment variable "${name}" is required`);
+    throw Error(`Environment variable "${name}" is required`)
   } else {
-    return env !== undefined ? typeFn(env) : fallback!;
+    return env !== undefined ? typeFn(env) : fallback!
   }
-};
+}
 
-const asBoolean = (str: string) => /^true$/i.test(str);
+const asBoolean = (str: string) => /^true$/i.test(str)
 
 const serverConfigFromEnv = () => {
-  const fake = requiredEnv("FAKE", asBoolean, false); // For local development. If set, the API returns dummy data
+  const fake = requiredEnv('FAKE', asBoolean, false) // For local development. If set, the API returns dummy data
   return {
-    port: requiredEnv("PORT", Number, DEFAULT_PORT),
+    port: requiredEnv('PORT', Number, DEFAULT_PORT),
     cacheEnabled: requiredEnv(
-      "CACHE_ENABLED",
+      'CACHE_ENABLED',
       asBoolean,
       DEFAULT_CACHE_ENABLED,
     ),
     cacheTtlMsPlacesAutocomplete: requiredEnv(
-      "DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE",
+      'DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE',
       Number,
       DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE,
     ),
     geoapifyApiKey: requiredEnv(
-      "GEOAPIFY_API_KEY",
+      'GEOAPIFY_API_KEY',
       String,
-      fake ? "dummy value" : undefined,
+      fake ? 'dummy value' : undefined,
     ),
     fake,
-  };
-};
+  }
+}
 
-await startServer(serverConfigFromEnv());
+await startServer(serverConfigFromEnv())
diff --git a/app/server.ts b/app/server.ts
index 58d61ac04609b374f6619ae7549b4b03e307a960..8a50b2a16ea10c6519c1acf65c2fa222e7373b2f 100644
--- a/app/server.ts
+++ b/app/server.ts
@@ -5,10 +5,10 @@ import {
   PlacesAutocompleteParameters,
   PlacesDetailsParameters,
   SUPPORTED_LANGUAGES,
-} from "./types.ts";
-import { fetchPlaceDetails, fetchPlaces } from "./geoapify.ts";
-import { createSchema, createYoga, serve, useResponseCache } from "./deps.ts";
-import { logger } from "./logging.ts";
+} from './types.ts'
+import { fetchPlaceDetails, fetchPlaces } from './geoapify.ts'
+import { createSchema, createYoga, serve, useResponseCache } from './deps.ts'
+import { logger } from './logging.ts'
 
 const typeDefs = `
     type Coordinates {
@@ -38,15 +38,15 @@ const typeDefs = `
         placesAutocomplete(text: String!, limit: Int, level: String): [Place]!
         placeDetails(id: String!): PlaceDetails!
     }
-`;
+`
 
-const getLanguage = (languages = "") =>
+const getLanguage = (languages = '') =>
   languages
-    .split(",") // languages are comma separated
-    .map((language) => language.split("-")[0]) // languages may include country code 'de-DE' e.g.
-    .map((language) => language.split(";")[0]) // languages may include a 'de;q=0.6' e.g.
+    .split(',') // languages are comma separated
+    .map((language) => language.split('-')[0]) // languages may include country code 'de-DE' e.g.
+    .map((language) => language.split(';')[0]) // languages may include a 'de;q=0.6' e.g.
     .find((language) => SUPPORTED_LANGUAGES.includes(language)) ||
-  DEFAULT_LANGUAGE;
+  DEFAULT_LANGUAGE
 
 const createResolvers = (config: ServerConfig) => ({
   Query: {
@@ -74,30 +74,35 @@ const createResolvers = (config: ServerConfig) => ({
         config.geoapifyApiKey,
       ),
   },
-});
+})
 
-export const DEFAULT_PORT = 8003;
-export const DEFAULT_CACHE_ENABLED = true;
-export const DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE = 60_000 * 60 * 24;
+export const DEFAULT_PORT = 8003
+export const DEFAULT_CACHE_ENABLED = true
+export const DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE = 60_000 * 60 * 24
 
 export interface ServerConfig {
-  port: number; // default: 8003
-  cacheEnabled: boolean; // default: true
-  cacheTtlMsPlacesAutocomplete: number; // default: 24 hours
-  geoapifyApiKey: string;
-  fake: boolean;
+  port: number // default: 8003
+  cacheEnabled: boolean // default: true
+  cacheTtlMsPlacesAutocomplete: number // default: 24 hours
+  geoapifyApiKey: string
+  fake: boolean
 }
 
 export type GraphQLContext = {
   params?: {
     extensions?: {
       headers?: {
-        [key: string]: string;
-      };
-    };
-  };
-  language?: string;
-};
+        [key: string]: string
+      }
+    }
+  }
+  request?: {
+    headers?: {
+      [key: string]: string
+    }
+  }
+  language?: string
+}
 
 export const createGraphQLServer = (config: ServerConfig): GraphQLServer => {
   const plugins = config.cacheEnabled
@@ -106,50 +111,47 @@ export const createGraphQLServer = (config: ServerConfig): GraphQLServer => {
         // global cache per language, shared by all users
         session: (request: Request) =>
           getLanguage(
-            request.headers.get("accept-language") || DEFAULT_LANGUAGE,
+            request.headers.get('accept-language') || DEFAULT_LANGUAGE,
           ),
         ttlPerSchemaCoordinate: {
-          "Query.placesAutocomplete":
-            DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE,
-          "Query.placeDetails": DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE,
+          'Query.placesAutocomplete': DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE,
+          'Query.placeDetails': DEFAULT_CACHE_TTL_MS_GEOAPIFY_AUTOCOMPLETE,
         },
       }),
     ]
-    : [];
-  const resolvers = createResolvers(config);
+    : []
+  const resolvers = createResolvers(config)
   return createYoga({
     schema: createSchema({ resolvers, typeDefs }),
     graphiql: true,
     plugins,
     context: (context: GraphQLContext) => {
-      const headers = new Headers(context.params?.extensions?.headers);
-      const languages = headers.get("accept-language") || DEFAULT_LANGUAGE;
+      const headers = new Headers(context.params?.extensions?.headers ?? context.request?.headers)
+      const languages = headers.get('accept-language') || DEFAULT_LANGUAGE
       return {
         ...context,
         language: getLanguage(languages),
-      };
+      }
     },
-  });
-};
+  })
+}
 
 // deno-lint-ignore no-explicit-any
-export type GraphQLServer = any;
+export type GraphQLServer = any
 
 export const startServer = (config: ServerConfig): Promise<void> => {
-  const graphQLServer: GraphQLServer = createGraphQLServer(config);
+  const graphQLServer: GraphQLServer = createGraphQLServer(config)
   return serve(graphQLServer.handleRequest, {
     port: config.port,
     onListen({ port, hostname }) {
       logger.info(
-        `Server started at http://${
-          hostname === "0.0.0.0" ? "localhost" : hostname
-        }:${port}/graphql`,
-      );
+        `Server started at http://${hostname === '0.0.0.0' ? 'localhost' : hostname}:${port}/graphql`,
+      )
       if (config.fake) {
         logger.info(
           `Server is serving fake data due to FAKE env var set to true`,
-        );
+        )
       }
     },
-  });
-};
+  })
+}
diff --git a/app/types.ts b/app/types.ts
index ffe293042829f18a785f5e2e7ef43e00f00d53d7..c58dba296f1a023d6bd20bb723f8ada5084ec0c8 100644
--- a/app/types.ts
+++ b/app/types.ts
@@ -1,34 +1,34 @@
-import { GeoapifyPlaceDetails } from "./geoapify_api_types.ts";
+import { GeoapifyPlaceDetails } from './geoapify_api_types.ts'
 
 export type Coordinates = {
-  latitude: number;
-  longitude: number;
-};
+  latitude: number
+  longitude: number
+}
 
 export interface Place {
-  id: string;
-  name: string;
-  city?: string; //This is a temporary field which will be used by the frontend when filtering for spaces
-  state?: string;
-  country: string;
-  coordinates: Coordinates;
+  id: string
+  name: string
+  city?: string //This is a temporary field which will be used by the frontend when filtering for spaces
+  state?: string
+  country: string
+  coordinates: Coordinates
 }
 
 export interface PlaceDetails {
-  id: string;
-  name: string;
-  geolocation: GeoapifyPlaceDetails;
+  id: string
+  name: string
+  geolocation: GeoapifyPlaceDetails
 }
 
-export const DEFAULT_LANGUAGE = "en";
-export const SUPPORTED_LANGUAGES = ["en", "de"];
+export const DEFAULT_LANGUAGE = 'en'
+export const SUPPORTED_LANGUAGES = ['en', 'de']
 
 export interface PlacesAutocompleteParameters {
-  text: string;
-  limit?: number;
-  level?: string;
+  text: string
+  limit?: number
+  level?: string
 }
 
 export interface PlacesDetailsParameters {
-  id: string;
+  id: string
 }
diff --git a/deno.json b/deno.json
index c88e7f3de47b8750c77367781f3fb8ea023083c3..f97c7be6c705d3b0f88441c0cdf2d2f9828bfc70 100644
--- a/deno.json
+++ b/deno.json
@@ -5,11 +5,11 @@
       "fmt": "deno fmt",
       "fmt:check": "deno fmt --check",
       "test": "deno test",
-      "updateDeps": "deno cache --lock=deno.lock --lock-write app/deps.ts app/dev_deps.ts",
-      "install": "deno cache --reload --lock=deno.lock app/deps.ts app/dev_deps.ts",
-      "cache": "deno cache app/main.ts",
-      "dev": "deno run --allow-net --allow-env --lock=deno.lock --cached-only --watch app/main.ts",
-      "start": "deno run --allow-net --allow-env --lock=deno.lock --cached-only app/main.ts",
+      "updateDeps": "deno cache --allow-import --lock=deno.lock --lock-write app/deps.ts app/dev_deps.ts",
+      "install": "deno cache --allow-import --reload --lock=deno.lock app/deps.ts app/dev_deps.ts",
+      "cache": "deno cache --allow-import app/main.ts",
+      "dev": "deno run --allow-import --allow-net --allow-env --lock=deno.lock --cached-only --watch app/main.ts",
+      "start": "deno run --allow-import --allow-net --allow-env --lock=deno.lock --cached-only app/main.ts",
       "docker": "docker build -t geo-service . && docker run -it --init -p 8003:8003 geo-service",
       "coverage": "deno test --coverage=coverage && deno coverage coverage",
       "pre-commit": {
@@ -19,6 +19,9 @@
     }
   },
   "fmt": {
+    "lineWidth": 120,
+    "singleQuote": true,
+    "semiColons": false,
     "exclude": ["*.md"]
   }
 }