From ec2921b2e69a371a12d0ee1bbb61dcd4b878869f Mon Sep 17 00:00:00 2001 From: Michael Breu <Michael.Breu@arctis.at> Date: Tue, 27 Aug 2024 17:58:15 +0200 Subject: [PATCH] Fixing sporadic duplicate exercises (and sonar) --- .../search/ElasticSearchRepository.java | 16 ++++++++++++---- .../gitsearch/service/StatisticsService.java | 7 ++++++- .../gitsearch/service/AuditEventServiceIT.java | 4 ++-- .../gitsearch/service/ReminderServiceIT.java | 4 +--- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/ElasticSearchRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/ElasticSearchRepository.java index 0fbd62e69..45b564543 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/search/ElasticSearchRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/ElasticSearchRepository.java @@ -78,10 +78,14 @@ public class ElasticSearchRepository { return i.index(index).id(exerciseId).document(document); }); final String exerciseId2 = document.getExerciseId(); - try { - ExerciseId.fromString(exerciseId2); - } catch (ParseException e) { - LOGGER.error("Somehow we got an corrupt exerciseId {}", exerciseId2, e); + if (exerciseId2 == null) { + LOGGER.error("Somehow we got an empty exerciseId in {}", document); + } else { + try { + ExerciseId.fromString(exerciseId2); + } catch (ParseException e) { + LOGGER.error("Somehow we got an corrupt exerciseId {}", exerciseId2, e); + } } return exerciseId2; } @@ -158,9 +162,13 @@ public class ElasticSearchRepository { * @throws ElasticsearchException * @throws IOException */ + @SuppressWarnings("null") public SearchResultDTO get(final String docId) throws IOException { final GetResponse<SearchResultDTO> searchResultDTOResponse = this.elasticsearchAPIClient.get(r -> r.index(SearchRepositoryConstants.INDEX_METADATA).id(docId), SearchResultDTO.class); + if (searchResultDTOResponse.source() != null) { + searchResultDTOResponse.source().setExerciseId(docId); + } return searchResultDTOResponse.source(); } diff --git a/src/main/java/at/ac/uibk/gitsearch/service/StatisticsService.java b/src/main/java/at/ac/uibk/gitsearch/service/StatisticsService.java index 98c444e9f..3ca27991a 100644 --- a/src/main/java/at/ac/uibk/gitsearch/service/StatisticsService.java +++ b/src/main/java/at/ac/uibk/gitsearch/service/StatisticsService.java @@ -4,6 +4,7 @@ import at.ac.uibk.gitsearch.domain.Statistics; import at.ac.uibk.gitsearch.repository.jpa.StatisticsRepository; import at.ac.uibk.gitsearch.repository.search.ElasticSearchRepository; import at.ac.uibk.gitsearch.service.dto.StatisticsDTO; +import at.ac.uibk.gitsearch.service.mapper.StatisticsMapper; import java.io.IOException; import java.util.List; import java.util.Map; @@ -35,6 +36,9 @@ public class StatisticsService { @Autowired private ElasticSearchRepository elasticSearchRepository; + @Autowired + private StatisticsMapper statisticsMapper; + /** * Save a statistics. * @@ -231,7 +235,8 @@ public class StatisticsService { entry = statistics.get(statistics.size() - 1); // last one } updater.update(entry); - statisticsRepository.save(entry); + entry = statisticsRepository.save(entry); + updateSearchResult(statisticsMapper.toDto(entry)); } public void removeBadgeForStatisticsByExerciseID(String exerciseID) { diff --git a/src/test/java/at/ac/uibk/gitsearch/service/AuditEventServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/AuditEventServiceIT.java index b13dc5f1b..abc8530ad 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/AuditEventServiceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/AuditEventServiceIT.java @@ -103,7 +103,7 @@ public class AuditEventServiceIT { @Test @Timeout(value = 5, unit = TimeUnit.MINUTES) @DirtiesContext - public void verifyOldAuditEventsAreDeleted() { + void verifyOldAuditEventsAreDeleted() { assertThat(persistenceAuditEventRepository.findAll().size()).isEqualTo(currentAuditLogs + auditEventsOld.size() + 2); log.info("Removing outdated AuditEvents"); @@ -124,7 +124,7 @@ public class AuditEventServiceIT { @Test @Timeout(value = 5, unit = TimeUnit.MINUTES) @DirtiesContext - public void verifyOldAuditEventsAreDeleted2() { + void verifyOldAuditEventsAreDeleted2() { assertThat(persistenceAuditEventRepository.findAll().size()).isEqualTo(currentAuditLogs + auditEventsOld.size() + 2); int deleted = this.auditEventService.removeOutdatedAuditEvents2(); diff --git a/src/test/java/at/ac/uibk/gitsearch/service/ReminderServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/ReminderServiceIT.java index 9ab54cae5..47da511d0 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/ReminderServiceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/ReminderServiceIT.java @@ -225,9 +225,7 @@ public class ReminderServiceIT { verify(mailService).sendEmail(toCaptor.capture(), subjectCaptor.capture(), messageCaptor.capture(), anyBoolean(), anyBoolean()); assertThat(toCaptor.getValue()).contains(user.getEmail()); final String content = messageCaptor.getValue(); - assertThat(content).isNotEmpty(); - - assertThat(content).contains("Simple IO Test").contains("testDaily"); + assertThat(content).isNotEmpty().contains("Simple IO Test").contains("testDaily"); // last sending update? // for daily watch list -- GitLab