diff --git a/backend/src/main/java/cx/flamingo/analysis/cache/impl/RedisCacheService.java b/backend/src/main/java/cx/flamingo/analysis/cache/impl/RedisCacheService.java index 1a5e45c..df25b82 100644 --- a/backend/src/main/java/cx/flamingo/analysis/cache/impl/RedisCacheService.java +++ b/backend/src/main/java/cx/flamingo/analysis/cache/impl/RedisCacheService.java @@ -47,6 +47,9 @@ protected String getHttpCachePath() { protected Long getInsertTime(String cachePath, String key) { String redisKey = buildRedisKey(cachePath, key); Object json = valueOps.get(redisKey + EXPIRATION_SUFFIX); + if (json == null) { + return 0L; + } Expiration expiration = gson.fromJson(json.toString(), Expiration.class); if (expiration != null) { return expiration.getTimestamp(); diff --git a/backend/src/main/java/cx/flamingo/analysis/graphql/QuerySerializer.java b/backend/src/main/java/cx/flamingo/analysis/graphql/QuerySerializer.java index 62078ae..fe269ef 100644 --- a/backend/src/main/java/cx/flamingo/analysis/graphql/QuerySerializer.java +++ b/backend/src/main/java/cx/flamingo/analysis/graphql/QuerySerializer.java @@ -53,7 +53,7 @@ private void serializeArguments(StringBuilder builder, Map args) for (Map.Entry entry : args.entrySet()) { String value = entry.getValue() instanceof String - ? entry.getValue().toString() // Don't add extra quotes + ? "\"" + entry.getValue().toString() + "\"" // Add quotes for string values : entry.getValue().toString(); joiner.add(entry.getKey() + ": " + value); } @@ -64,4 +64,4 @@ private void serializeArguments(StringBuilder builder, Map args) private StringBuilder appendIndent(StringBuilder builder) { return builder.append(" ".repeat(indent)); } -} \ No newline at end of file +} diff --git a/backend/src/main/java/cx/flamingo/analysis/rate/GithubTokenRateManager.java b/backend/src/main/java/cx/flamingo/analysis/rate/GithubTokenRateManager.java index ce61265..cbd1703 100644 --- a/backend/src/main/java/cx/flamingo/analysis/rate/GithubTokenRateManager.java +++ b/backend/src/main/java/cx/flamingo/analysis/rate/GithubTokenRateManager.java @@ -95,10 +95,6 @@ private void printTokensStatus() { * endpoint to get remaining requests and reset time. */ public synchronized void initializeRateLimits() { - if (alreadyInitialized) { - return; - } - alreadyInitialized = true; for (Map.Entry> entry : tokenMap.entrySet()) { String token = entry.getKey(); try { @@ -123,6 +119,7 @@ public synchronized void initializeRateLimits() { token.substring(0, 8), e.getMessage()); } } + alreadyInitialized = true; printTokensStatus(); } diff --git a/backend/src/main/java/cx/flamingo/analysis/service/PreCacheService.java b/backend/src/main/java/cx/flamingo/analysis/service/PreCacheService.java index e1db75b..354bf31 100644 --- a/backend/src/main/java/cx/flamingo/analysis/service/PreCacheService.java +++ b/backend/src/main/java/cx/flamingo/analysis/service/PreCacheService.java @@ -27,7 +27,7 @@ public class PreCacheService { CacheServiceAbs cacheService; // Always run the cache refresh cycle on startup - @Scheduled(initialDelay = 1000l, fixedDelay = 1000l) + @Scheduled(initialDelay = 1000l, fixedDelay = 3600000l) void runFullCacheCycle() { Instant startTime = Instant.now(); log.info("Starting cache refresh cycle for all languages..."); @@ -53,3 +53,4 @@ void runFullCacheCycle() { totalDuration.getSeconds() % 60); } } + diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index fbb5307..63c6111 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,5 +1,5 @@ import { CssBaseline, ThemeProvider } from '@mui/material'; -import { useMemo, useEffect } from 'react'; +import { useMemo } from 'react'; import { getTheme } from './theme'; import { Layout } from './components/Layout'; import { FiltersPanel } from './components/FiltersPanel'; @@ -26,10 +26,6 @@ const MainApp = () => { const { urlState } = useUrlState(); - useEffect(() => { - console.log('App: URL state changed:', urlState); - }, [urlState]); - const { data: contributors = [], isLoading, error } = useQuery({ queryKey: [ 'contributors', @@ -40,13 +36,6 @@ const MainApp = () => { urlState.teamId ], queryFn: ({ signal }) => { - console.log('Fetching contributors with params:', { - cityId: urlState.selectedCityId, - regionId: urlState.selectedRegionId, - stateId: urlState.stateId, - languageId: urlState.languageId, - teamId: urlState.teamId - }); return getContributors({ cityId: urlState.selectedCityId || undefined, regionId: urlState.selectedRegionId || undefined, @@ -88,3 +77,4 @@ export const App = () => { }; export default App; + diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index abe324a..20fe450 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -4,7 +4,7 @@ import { HiringManagerProfile, JobOpening } from '../types/hiring'; // Configure axios to use the backend URL from environment const BACKEND_API_URL = process.env.BACKEND_API_URL || '/'; -console.log('API Service: Using backend URL:', BACKEND_API_URL); +if (process.env.NODE_ENV !== 'production') { console.log('API Service: Using backend URL:', BACKEND_API_URL); } axios.defaults.baseURL = BACKEND_API_URL; @@ -223,3 +223,4 @@ export const getJobOpenings = async (): Promise => { } return response.data.data; }; // Force rebuild Sun Aug 31 19:49:51 EDT 2025 +