Skip to content

Commit

Permalink
fix: issue with caching transport modes
Browse files Browse the repository at this point in the history
  • Loading branch information
mikaelbr committed Feb 16, 2024
1 parent aa2bb31 commit a05a693
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
2 changes: 2 additions & 0 deletions src/page-modules/assistant/__tests__/assistant.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ describe('assistant page', function () {
transportModeFilter: null,
cursor: null,
lineFilter: null,
via: null,
};
const fromToTripQuery2: FromToTripQuery = {
from: fromFeature,
Expand Down Expand Up @@ -286,6 +287,7 @@ describe('assistant page', function () {
transportModeFilter: null,
cursor: null,
lineFilter: null,
via: null,
};

addAssistantTripToCache(cachedFromToTripQuery, tripResult);
Expand Down
20 changes: 14 additions & 6 deletions src/page-modules/assistant/server/trip-cache.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import TTLCache from '@isaacs/ttlcache';
import { FromToTripQuery, TripData } from '../types';
import { createTripQuery, tripQueryToQueryString } from '../utils';

let tripCache: TTLCache<string, TripData> | null = null;

Expand All @@ -15,16 +14,25 @@ function getTripCacheInstance(): TTLCache<string, TripData> {
export function getAssistantTripIfCached(
query: FromToTripQuery,
): TripData | undefined {
const queryString = tripQueryToQueryString(createTripQuery(query));
if (tripCache?.has(`/api/assistant/trip?${queryString}`)) {
return tripCache.get(`/api/assistant/trip?${queryString}`);
const cacheKey = createCacheKey(query);
if (tripCache?.has(cacheKey)) {
return tripCache.get(cacheKey);
}
}

export function addAssistantTripToCache(
query: FromToTripQuery,
tripData: TripData,
) {
const queryString = tripQueryToQueryString(createTripQuery(query));
getTripCacheInstance().set(`/api/assistant/trip?${queryString}`, tripData);
getTripCacheInstance().set(createCacheKey(query), tripData);
}

function createCacheKey(valuesToCreateCacheKey: FromToTripQuery) {
const keys = Object.keys(valuesToCreateCacheKey).sort();
const values = keys.map(
(key) => valuesToCreateCacheKey[key as keyof FromToTripQuery],
);
const cacheKey = JSON.stringify(values);

return 'assistant-trip-' + Buffer.from(cacheKey).toString('base64');
}

0 comments on commit a05a693

Please sign in to comment.