From 22bb5ae16ac40ee4defb87daf51ab85376563cae Mon Sep 17 00:00:00 2001 From: "flamingo[bot]" <277372822+flamingo[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2026 14:23:24 +0000 Subject: [PATCH 1/3] fix(MAJORLEA-002): 5 review findings across 3 files --- .../analysis/controller/EntityController.java | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/backend/src/main/java/cx/flamingo/analysis/controller/EntityController.java b/backend/src/main/java/cx/flamingo/analysis/controller/EntityController.java index 6152e09c..ce716f65 100644 --- a/backend/src/main/java/cx/flamingo/analysis/controller/EntityController.java +++ b/backend/src/main/java/cx/flamingo/analysis/controller/EntityController.java @@ -1,6 +1,5 @@ package cx.flamingo.analysis.controller; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -12,35 +11,33 @@ import cx.flamingo.analysis.model.Region; import cx.flamingo.analysis.model.SoccerTeam; import cx.flamingo.analysis.model.State; +import cx.flamingo.analysis.service.CacheService; import cx.flamingo.analysis.service.CityService; import cx.flamingo.analysis.service.LanguageService; import cx.flamingo.analysis.service.RegionService; import cx.flamingo.analysis.service.SoccerTeamService; import cx.flamingo.analysis.service.StateService; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @Slf4j @RestController @RequestMapping("/api/entities") +@RequiredArgsConstructor public class EntityController { - @Autowired - private CityService cityService; - - @Autowired - private RegionService regionService; - - @Autowired - private StateService stateService; - - @Autowired - private LanguageService languageService; - - @Autowired - private SoccerTeamService soccerTeamService; + private final CacheService cacheService; + private final CityService cityService; + private final RegionService regionService; + private final StateService stateService; + private final LanguageService languageService; + private final SoccerTeamService soccerTeamService; @GetMapping("/cities/{id}") public ApiResponse getCityById(@PathVariable String id) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Cache is not ready"); + } City city = cityService.getCityById(id); if (city == null) { log.warn("City not found with ID: {}", id); @@ -51,6 +48,9 @@ public ApiResponse getCityById(@PathVariable String id) { @GetMapping("/regions/{id}") public ApiResponse getRegionById(@PathVariable String id) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Cache is not ready"); + } Region region = regionService.getRegionById(id); if (region == null) { log.warn("Region not found with ID: {}", id); @@ -61,6 +61,9 @@ public ApiResponse getRegionById(@PathVariable String id) { @GetMapping("/states/{id}") public ApiResponse getStateById(@PathVariable String id) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Cache is not ready"); + } State state = stateService.getStateById(id); if (state == null) { log.warn("State not found with ID: {}", id); @@ -71,6 +74,9 @@ public ApiResponse getStateById(@PathVariable String id) { @GetMapping("/languages/{id}") public ApiResponse getLanguageById(@PathVariable String id) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Cache is not ready"); + } Language language = languageService.getLanguageById(id); if (language == null) { log.warn("Language not found with ID: {}", id); @@ -81,6 +87,9 @@ public ApiResponse getLanguageById(@PathVariable String id) { @GetMapping("/teams/{id}") public ApiResponse getTeamById(@PathVariable String id) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Cache is not ready"); + } SoccerTeam team = soccerTeamService.getTeamById(id); if (team == null) { log.warn("Team not found with ID: {}", id); @@ -88,4 +97,4 @@ public ApiResponse getTeamById(@PathVariable String id) { } return ApiResponse.success(team, String.format("Found team: %s", team.getName())); } -} \ No newline at end of file +} From 9eea51502d5e4c6bc062735fc5ebaf97d0cd9ccf Mon Sep 17 00:00:00 2001 From: "flamingo[bot]" <277372822+flamingo[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2026 14:23:25 +0000 Subject: [PATCH 2/3] fix(MAJORLEA-002): 5 review findings across 3 files --- .../analysis/service/HiringService.java | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/backend/src/main/java/cx/flamingo/analysis/service/HiringService.java b/backend/src/main/java/cx/flamingo/analysis/service/HiringService.java index 5337d175..8f1c8a8d 100644 --- a/backend/src/main/java/cx/flamingo/analysis/service/HiringService.java +++ b/backend/src/main/java/cx/flamingo/analysis/service/HiringService.java @@ -36,6 +36,11 @@ public class HiringService { public Map getHiringManagerProfile() { Map response = new HashMap<>(); + if (!cacheService.isCacheReady()) { + response.put("status", "error"); + response.put("message", "Cache is not ready yet, please try again later"); + return response; + } HiringManagerProfile profile = cacheService.get(CACHE_PATH, PROFILE_KEY, new TypeToken() { }, refreshInterval) .orElseGet(() -> { @@ -65,31 +70,15 @@ public Map getHiringManagerProfile() { } public List getJobOpenings() { + if (!cacheService.isCacheReady()) { + return List.of(); + } return cacheService.get(CACHE_PATH, JOBS_KEY, new TypeToken>() { }, refreshInterval) .orElseGet(() -> { List jobs = linkedInService.getCompanyJobPostings(); if (jobs == null || jobs.isEmpty()) { - // Fallback to default jobs if LinkedIn API fails - jobs = List.of( - JobOpening.builder() - .id("senior-back-end-engineer-1") - .title("Senior Back-end Engineer") - .location("Remote") - .url("https://djinni.co/jobs/717621-senior-back-end-engineer/") - .build(), - JobOpening.builder() - .id("senior-devops-engineer-2") - .title("Senior DevOps Engineer") - .location("Remote") - .url("https://djinni.co/jobs/717622-senior-devops-engineer/") - .build(), - JobOpening.builder() - .id("senior-front-end-engineer-3") - .title("Senior Front-end Engineer") - .location("Remote") - .url("https://djinni.co/jobs/717624-senior-front-end-engineer/") - .build()); + jobs = List.of(); } cacheService.put(CACHE_PATH, JOBS_KEY, jobs); return jobs; From e629a43b3165b3b1b51519e447fe2c29d2c49d57 Mon Sep 17 00:00:00 2001 From: "flamingo[bot]" <277372822+flamingo[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2026 14:23:26 +0000 Subject: [PATCH 3/3] fix(MAJORLEA-002): 5 review findings across 3 files --- .../controller/AutocompleteController.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/backend/src/main/java/cx/flamingo/analysis/controller/AutocompleteController.java b/backend/src/main/java/cx/flamingo/analysis/controller/AutocompleteController.java index 9af47ec3..cafa7d04 100644 --- a/backend/src/main/java/cx/flamingo/analysis/controller/AutocompleteController.java +++ b/backend/src/main/java/cx/flamingo/analysis/controller/AutocompleteController.java @@ -13,6 +13,7 @@ import cx.flamingo.analysis.model.Region; import cx.flamingo.analysis.model.SoccerTeam; import cx.flamingo.analysis.model.State; +import cx.flamingo.analysis.service.CacheService; import cx.flamingo.analysis.service.CityService; import cx.flamingo.analysis.service.LanguageService; import cx.flamingo.analysis.service.RegionService; @@ -27,6 +28,7 @@ @RequiredArgsConstructor public class AutocompleteController { + private final CacheService cacheService; private final CityService cityService; private final StateService stateService; private final RegionService regionService; @@ -39,6 +41,9 @@ public ApiResponse> autocompleteCities( @RequestParam(required = false) String regionId, @RequestParam(required = false) String stateId, @RequestParam(defaultValue = "50") int maxResults) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Service is not ready yet, please try again later"); + } log.info("Autocomplete cities with query: {}, regionId: {}, stateId: {}, maxResults: {}", query != null ? query : "none", regionId != null ? regionId : "none", @@ -54,6 +59,9 @@ public ApiResponse> autocompleteRegions( @RequestParam(required = false) String stateId, @RequestParam(required = false) List cityIds, @RequestParam(defaultValue = "50") int maxResults) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Service is not ready yet, please try again later"); + } log.info("Autocomplete regions with query: {}, stateId: {}, cityIds: {}, maxResults: {}", query != null ? query : "none", stateId != null ? stateId : "none", @@ -69,6 +77,9 @@ public ApiResponse> autocompleteStates( @RequestParam(required = false) String regionId, @RequestParam(required = false) List cityIds, @RequestParam(defaultValue = "50") int maxResults) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Service is not ready yet, please try again later"); + } log.info("Autocomplete states with query: {}, regionId: {}, cityIds: {}, maxResults: {}", query != null ? query : "none", regionId != null ? regionId : "none", @@ -82,6 +93,9 @@ public ApiResponse> autocompleteStates( public ApiResponse> autocompleteLanguages( @RequestParam(required = false) String query, @RequestParam(defaultValue = "50") int maxResults) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Service is not ready yet, please try again later"); + } log.info("Autocomplete languages with query: {}, maxResults: {}", query != null ? query : "none", maxResults); @@ -93,6 +107,9 @@ public ApiResponse> autocompleteLanguages( public ApiResponse> autocompleteTeams( @RequestParam(required = false) String query, @RequestParam(defaultValue = "50") int maxResults) { + if (!cacheService.isCacheReady()) { + return ApiResponse.error("Service is not ready yet, please try again later"); + } log.info("Autocomplete teams with query: {}, maxResults: {}", query != null ? query : "none", maxResults);