From 4d107b247504db7ab54d9da0fb871eab6a71aab5 Mon Sep 17 00:00:00 2001 From: Corina Olariu Date: Mon, 4 Mar 2024 10:30:54 +0200 Subject: [PATCH 1/2] RED-7049 - Wrong error code when adding entity with already existing rank - correct the query to get the type with same rank. - changed to get the list of types instead of a one result for the case with several types with the same rank - added junit tests Signed-off-by: Corina Olariu --- .../DictionaryPersistenceService.java | 16 ++++-- .../repository/TypeRepository.java | 10 +++- .../integration/tests/DictionaryTest.java | 56 +++++++++++++++++++ 3 files changed, 74 insertions(+), 8 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java index e0beee098..2bdacf7cf 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; @@ -85,18 +86,21 @@ public class DictionaryPersistenceService { private void checkRankAlreadyExists(String type, String dossierTemplateId, int rank, String dossierId) { - Optional existingTypeValueForRank = getTypeForRank(dossierTemplateId, rank, dossierId); - - if (existingTypeValueForRank.isPresent() && !existingTypeValueForRank.get().isDeleted() && !existingTypeValueForRank.get().getType().equalsIgnoreCase(type)) { - throw new BadRequestException("Rank already exists: " + rank + " on type: " + existingTypeValueForRank.get().getType()); + List existingTypesForRank = getTypesForRank(dossierTemplateId, rank, dossierId); + if (!existingTypesForRank.isEmpty()) { + for (var existingTypeValueForRank : existingTypesForRank) { + if (!existingTypeValueForRank.isDeleted() && !existingTypeValueForRank.getType().equalsIgnoreCase(type)) { + throw new ConflictException("Rank already exists: " + rank + " on type: " + existingTypeValueForRank.getType()); + } + } } } - private Optional getTypeForRank(String dossierTemplateId, int rank, String dossierId) { + private List getTypesForRank(String dossierTemplateId, int rank, String dossierId) { - return typeRepository.findOneByDossierTemplateIdAndDossierIdAndRank(dossierTemplateId, dossierId, rank); + return typeRepository.findByDossierTemplateIdAndDossierIdAndRank(dossierTemplateId, dossierId, rank); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java index e98d30c46..883619630 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java @@ -14,8 +14,14 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp public interface TypeRepository extends JpaRepository { - @Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplate and t.dossierId = :dossier and t.rank = :rank and t.softDeletedTime is null") - Optional findOneByDossierTemplateIdAndDossierIdAndRank(@Param("dossierTemplate") String dossierTemplate, @Param("dossier") String dossier, @Param("rank") int rank); + @Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplateId and " + + "(CASE " + + " WHEN :dossierId is null THEN t.dossierId is null " + + " WHEN :dossierId is not null THEN t.dossierId = :dossierId " + + "END) and t.rank = :rank and t.softDeletedTime is null") + List findByDossierTemplateIdAndDossierIdAndRank(@Param("dossierTemplateId") String dossierTemplateId, + @Param("dossierId") String dossierId, + @Param("rank") int rank); List findByDossierId(String dossierId); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java index 9035f66be..b016ba95d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java @@ -57,6 +57,62 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { } + @Test + public void testAddTypesWithSameRank() { + + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var dossierTemplate = dossierTemplateClient.getDossierTemplate(dossier.getDossierTemplateId()); + + var returnedtype1 = dictionaryClient.addType(CreateTypeValue.builder() + .type("test1") + .label("test1") + .hexColor("#fcba03") + .rank(100) + .hint(false) + .caseInsensitive(false) + .recommendation(false) + .addToDictionaryAction(true) + .dossierTemplateId(dossierTemplate.getId()) + .dossierDictionaryOnly(false) + .build()); + assertThat(returnedtype1.getRank()).isEqualTo(100); + + Assertions.assertThrows(FeignException.Conflict.class, + () -> dictionaryClient.addType(CreateTypeValue.builder() + .type("test2") + .label("test2") + .hexColor("#fcba03") + .rank(100) + .hint(false) + .caseInsensitive(false) + .recommendation(false) + .addToDictionaryAction(true) + .dossierTemplateId(dossierTemplate.getId()) + .dossierDictionaryOnly(false) + .build())); + + var returnedtype2 = dictionaryClient.addType(CreateTypeValue.builder() + .type("test2") + .label("test2") + .hexColor("#fcba13") + .rank(50) + .hint(false) + .addToDictionaryAction(true) + .dossierTemplateId(dossierTemplate.getId()) + .dossierDictionaryOnly(false) + .build()); + assertThat(returnedtype2.getRank()).isEqualTo(50); + Assertions.assertThrows(FeignException.Conflict.class, () -> { + var request = new UpdateTypeValue(); + BeanUtils.copyProperties(returnedtype1, request); + request.setRank(50); + dictionaryClient.updateType(returnedtype1.getType(), returnedtype1.getDossierTemplateId(), request); + }); + + } + + @Test public void testAddEntriesToDossierTemplateDictionaryWithDossierDictionaryOnlyFlag() { -- 2.47.2 From 98f743052d3d590c9f4839ad3a4a6dc268023c7d Mon Sep 17 00:00:00 2001 From: Corina Olariu Date: Mon, 4 Mar 2024 11:00:51 +0200 Subject: [PATCH 2/2] RED-7049 - Wrong error code when adding entity with already existing rank - update junit so the rank of the types differs Signed-off-by: Corina Olariu --- .../integration/tests/performance/EntityPerformanceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java index ffff74605..64a146530 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java @@ -108,7 +108,7 @@ public class EntityPerformanceTest extends AbstractPersistenceServerServiceTest var template = dossierTemplateTesterAndProvider.provideTestTemplate("test"); var type1 = typeProvider.testAndProvideType(template, null, "t1"); - var type2 = typeProvider.testAndProvideType(template, null, "t2"); + var type2 = typeProvider.testAndProvideType(template, null, "t2", false,50); List type1Entries = entries.stream() .map(s -> new DictionaryEntryEntity(0, s, 1, false, type1.getTypeId())) -- 2.47.2