diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java index d20f28203..8f1452811 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPersistenceService.java @@ -37,7 +37,7 @@ public class NotificationPersistenceService { notification.setCreationDate(OffsetDateTime.now()); var notificationPreferences = notificationPreferencesPersistenceService.getOrCreateNotificationPreferences(addNotificationRequest.getUserId()); - if (!notificationPreferences.isInAppNotificationsEnabled() || notificationPreferences.getInAppNotifications().contains(notification.getNotificationType())) { + if (!notificationPreferences.isInAppNotificationsEnabled() || !notificationPreferences.getInAppNotifications().contains(notification.getNotificationType())) { notification.setSoftDeleted(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java index 2d0cd242f..62cef7e83 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java @@ -29,17 +29,20 @@ public class NotificationPreferencesPersistenceService { public void setNotificationPreference(String userId, NotificationPreferences newNotificationPreferences) { notificationPreferencesRepository.findById(userId) .ifPresentOrElse(oldNotificationPreferences -> { - BeanUtils.copyProperties(newNotificationPreferences, oldNotificationPreferences); // if we disabled the notification preferences just now - if (oldNotificationPreferences.isInAppNotificationsEnabled() && !newNotificationPreferences.isInAppNotificationsEnabled()) { + if (oldNotificationPreferences.isInAppNotificationsEnabled() != newNotificationPreferences.isInAppNotificationsEnabled()) { notificationRepository.deleteAllByUserId(userId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } var removedNotificationTypes = new ArrayList<>(oldNotificationPreferences.getInAppNotifications()); removedNotificationTypes.removeAll(newNotificationPreferences.getInAppNotifications()); - notificationRepository.deleteAllByUserIdAndNotificationTypeIn(userId, removedNotificationTypes, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + if(!removedNotificationTypes.isEmpty()) { + notificationRepository.deleteAllByUserIdAndNotificationTypeIn(userId, removedNotificationTypes, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + } + + BeanUtils.copyProperties(newNotificationPreferences, oldNotificationPreferences); }, () -> { NotificationPreferencesEntity notificationPreferencesEntity = new NotificationPreferencesEntity(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java index 9b2e35d7b..5e7c41c26 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/NotificationRepository.java @@ -13,23 +13,17 @@ public interface NotificationRepository extends JpaRepository :since") int hasInAppNotificationForUser(String userId, OffsetDateTime since); @Query("select n from NotificationEntity n where " + - " ( " + " (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.inAppNotifications apn where p.userId = :userId and p.inAppNotificationsEnabled = true )) " + - " ) " + " and n.softDeleted is null and n.userId = :userId order by n.creationDate desc") List findAppNotificationsForUser(String userId); @Query("select n from NotificationEntity n where " + - " ( " + " (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.inAppNotifications apn where p.userId = :userId and p.inAppNotificationsEnabled = true )) " + - " ) " + " and n.seenDate is null and n.softDeleted is null and n.userId = :userId order by n.creationDate desc ") List findUnseenNotificationsForUser(String userId); @@ -56,9 +50,7 @@ public interface NotificationRepository extends JpaRepository= :from and n.creationDate <= :to order by n.creationDate desc") List findEmailNotificationsForUserId(String userId, OffsetDateTime from, OffsetDateTime to); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java index deb493593..48f345f18 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ReanalysisRequiredStatusService.java @@ -65,6 +65,20 @@ public class ReanalysisRequiredStatusService { Map dossierVersionMap, Map dossierMap) { + // enhance with dossierTemplateId + DossierEntity dossier; + try { + dossier = dossierMap.computeIfAbsent(fileStatus.getDossierId(), k -> dossierPersistenceService.getAndValidateDossier(fileStatus.getDossierId())); + } catch (DossierNotFoundException e) { + log.info("Dossier {} was not found, thus analysis is not required", fileStatus.getDossierId()); + return new AnalysisRequiredResult(false, false); + } + + fileStatus.setDossierArchived(dossier.getArchivedTime() != null); + fileStatus.setDossierTemplateId(dossier.getDossierTemplateId()); + fileStatus.setDossierStatusId(dossier.getDossierStatusId()); + + if (ProcessingStatus.ERROR.equals(fileStatus.getProcessingStatus()) && !ignoreProcessingStates) { return new AnalysisRequiredResult(false, true); } @@ -83,7 +97,7 @@ public class ReanalysisRequiredStatusService { if (fileStatus.getLastFileAttributeChange() != null && fileStatus.getLastProcessed().isBefore(fileStatus.getLastFileAttributeChange())) { return new AnalysisRequiredResult(true, false); } else { - return requiresReanalysisBasedOnVersionDifference(fileStatus, dossierTemplateVersionMap, dossierVersionMap, dossierMap); + return requiresReanalysisBasedOnVersionDifference(fileStatus, dossier, dossierTemplateVersionMap, dossierVersionMap); } default: return new AnalysisRequiredResult(false, false); @@ -94,22 +108,10 @@ public class ReanalysisRequiredStatusService { } private AnalysisRequiredResult requiresReanalysisBasedOnVersionDifference(FileModel fileStatus, + DossierEntity dossier, Map> dossierTemplateVersionMap, - Map dossierVersionMap, - Map dossierMap) { + Map dossierVersionMap) { - // enhance with dossierTemplateId - DossierEntity dossier; - try { - dossier = dossierMap.computeIfAbsent(fileStatus.getDossierId(), k -> dossierPersistenceService.getAndValidateDossier(fileStatus.getDossierId())); - } catch (DossierNotFoundException e) { - log.info("Dossier {} was not found, thus analysis is not required", fileStatus.getDossierId()); - return new AnalysisRequiredResult(false, false); - } - - fileStatus.setDossierArchived(dossier.getArchivedTime() != null); - fileStatus.setDossierTemplateId(dossier.getDossierTemplateId()); - fileStatus.setDossierStatusId(dossier.getDossierStatusId()); // get relevant versions var dossierTemplateVersions = dossierTemplateVersionMap.computeIfAbsent(dossier.getDossierTemplateId(), diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java index 8b96aeaea..957e1ca7e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java @@ -1,10 +1,12 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import com.iqser.red.service.peristence.v1.server.integration.client.NotificationClient; +import com.iqser.red.service.peristence.v1.server.integration.client.NotificationPreferencesClient; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.notification.Notification; +import com.iqser.red.service.persistence.service.v1.api.model.notification.NotificationType; import org.assertj.core.util.Lists; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -19,10 +21,50 @@ public class NotificationTest extends AbstractPersistenceServerServiceTest { @Autowired private NotificationClient notificationClient; + @Autowired + private NotificationPreferencesClient notificationPreferencesClient; + + + @Test + public void testNotificationPreferences() { + // initialize in app notifications + var preferences = notificationPreferencesClient.getNotificationPreferences("1"); + + notificationClient.addNotification(AddNotificationRequest.builder() + .notificationType(NotificationType.ASSIGN_REVIEWER.name()) + .userId("1").build()); + + assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(1); + + + // disable in app notifications + preferences.setInAppNotificationsEnabled(false); + notificationPreferencesClient.setNotificationPreferences("1", preferences); + assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(0); + + // re-enable in app notifications + preferences.setInAppNotificationsEnabled(true); + notificationPreferencesClient.setNotificationPreferences("1", preferences); + assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(0); + + + notificationClient.addNotification(AddNotificationRequest.builder() + .notificationType(NotificationType.ASSIGN_REVIEWER.name()) + .userId("1").build()); + assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(1); + + + preferences.getInAppNotifications().remove(NotificationType.ASSIGN_REVIEWER.name()); + notificationPreferencesClient.setNotificationPreferences("1", preferences); + assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(0); + + + } + @Test public void testNotification() { - notificationClient.addNotification(AddNotificationRequest.builder().notificationType("test").issuerId("1").userId("1").target(Map.of("test", "test")).build()); + notificationClient.addNotification(AddNotificationRequest.builder().notificationType(NotificationType.ASSIGN_REVIEWER.name()).issuerId("1").userId("1").target(Map.of("test", "test")).build()); var notification = getNotification();