From e90b09aa749a26f425f7acb3eeb0d227a8e0f571 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Wed, 3 Nov 2021 11:24:35 +0100 Subject: [PATCH] RED-2668: Fixed create dossier dictionaries for multiple dossiers --- .../controller/DictionaryController.java | 56 +++++++++----- .../integration/tests/DictionaryTest.java | 75 +++++++++++++++++++ 2 files changed, 113 insertions(+), 18 deletions(-) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java index 490eb5a6e..6d2438982 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DictionaryController.java @@ -14,8 +14,10 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.co import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type; import com.iqser.red.service.persistence.service.v1.api.resources.DictionaryResource; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.apache.commons.collections4.CollectionUtils; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; @@ -23,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.transaction.Transactional; + import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -37,18 +40,15 @@ import static java.util.stream.Collectors.toList; @Slf4j public class DictionaryController implements DictionaryResource { - private final EntryPersistenceService entryPersistenceService; private final DictionaryPersistenceService dictionaryPersistenceService; private final ColorsService colorsService; @Override - public void addEntries(@PathVariable(TYPE_PARAMETER_NAME) String typeId, - @RequestBody List entries, + public void addEntries(@PathVariable(TYPE_PARAMETER_NAME) String typeId, @RequestBody List entries, @RequestParam(value = "removeCurrent", required = false, defaultValue = "false") boolean removeCurrent) { - List cleanEntries = entries.stream().map(this::cleanDictionaryEntry).collect(toList()); validateEntries(cleanEntries); @@ -79,7 +79,7 @@ public class DictionaryController implements DictionaryResource { List added = new ArrayList<>(cleanEntries); added.removeAll(existing); - if(added.isEmpty()){ + if (added.isEmpty()) { return; } entryPersistenceService.addEntry(typeId, added, currentVersion + 1); @@ -90,8 +90,7 @@ public class DictionaryController implements DictionaryResource { @Override - public void deleteEntries(@PathVariable(TYPE_PARAMETER_NAME) String typeId, - @RequestBody List entries) { + public void deleteEntries(@PathVariable(TYPE_PARAMETER_NAME) String typeId, @RequestBody List entries) { validateEntries(entries); // To check whether the type exists @@ -116,8 +115,7 @@ public class DictionaryController implements DictionaryResource { @Override - public void updateTypeValue(@PathVariable(TYPE_PARAMETER_NAME) String typeId, - @RequestBody Type typeValueRequest) { + public void updateTypeValue(@PathVariable(TYPE_PARAMETER_NAME) String typeId, @RequestBody Type typeValueRequest) { validateColor(typeValueRequest.getHexColor()); validateBoolean(typeValueRequest.isHint(), "isHint"); @@ -125,12 +123,11 @@ public class DictionaryController implements DictionaryResource { // To check whether the type exists Type typeResult = convert(dictionaryPersistenceService.getType(typeId), Type.class); - if (typeValueRequest.getLabel() != null) { - checkForDuplicateLabels(typeResult.getDossierTemplateId(), typeResult.getDossierId(), typeValueRequest.getType(), typeValueRequest.getLabel()); + checkForDuplicateLabels(typeResult.getDossierTemplateId(), typeResult.getDossierId(), typeValueRequest.getType(), typeValueRequest + .getLabel()); } - if (typeValueRequest.getLabel() == null) { typeValueRequest.setLabel(typeResult.getLabel()); } @@ -163,12 +160,18 @@ public class DictionaryController implements DictionaryResource { typeRequest.setLabel(label); } - checkForDuplicateLabels(typeRequest.getDossierTemplateId(), typeRequest.getDossierId(), typeRequest.getType(), typeRequest.getLabel()); + checkForDuplicateLabels(typeRequest.getDossierTemplateId(), typeRequest.getDossierId(), typeRequest.getType(), typeRequest + .getLabel()); if (dictionaryPersistenceService.getCumulatedTypes(typeRequest.getDossierTemplateId(), typeRequest.getDossierId()) .stream() - .anyMatch(typeResult -> typeRequest.getDossierId() != null && typeResult.getDossierId() != null && typeRequest.getDossierId().equals(typeResult.getDossierId()) && typeRequest.getType().equals(typeResult.getType()) && typeRequest.getDossierTemplateId().equals(typeResult.getDossierTemplateId()) - || typeRequest.getType().equals(typeResult.getType()) && typeRequest.getDossierTemplateId().equals(typeResult.getDossierTemplateId()))) { + .anyMatch(typeResult -> typeRequest.getDossierId() != null && typeResult.getDossierId() != null && typeRequest + .getDossierId() + .equals(typeResult.getDossierId()) && typeRequest.getType() + .equals(typeResult.getType()) && typeRequest.getDossierTemplateId() + .equals(typeResult.getDossierTemplateId()) || typeRequest.getDossierId() == null && typeRequest.getType() + .equals(typeResult.getType()) && typeRequest.getDossierTemplateId() + .equals(typeResult.getDossierTemplateId()))) { throw new ConflictException("The type already exists, could not be added again."); } String color = typeRequest.getHexColor(); @@ -199,28 +202,34 @@ public class DictionaryController implements DictionaryResource { @Override - public List getAllTypesForDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { + public List getAllTypesForDossierTemplate( + @PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { return convert(dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId), Type.class); } + @Override public List getAllTypesForDossier(@PathVariable(DOSSIER_ID_PARAMETER_NAME) String dossierId) { return convert(dictionaryPersistenceService.getAllTypesForDossier(dossierId), Type.class); } + @Override public Type getDictionaryForType(@PathVariable(TYPE_PARAMETER_NAME) String typeId) { + var entity = dictionaryPersistenceService.getType(typeId); var target = convert(entity, Type.class); target.setEntries(convert(entity.getEntries(), DictionaryEntry.class)); return target; } + @Override @Transactional public List getEntriesForType(@PathVariable(TYPE_PARAMETER_NAME) String typeId) { + return convert(dictionaryPersistenceService.getType(typeId).getEntries(), DictionaryEntry.class); } @@ -261,11 +270,14 @@ public class DictionaryController implements DictionaryResource { @Override public long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { + return dictionaryPersistenceService.getVersion(dossierTemplateId); } + @Override public long getVersionForDossier(@PathVariable(DOSSIER_ID_PARAMETER_NAME) String dossierId) { + return dictionaryPersistenceService.getVersionForDossier(dossierId); } @@ -273,6 +285,7 @@ public class DictionaryController implements DictionaryResource { @Override public void setColors(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody Colors colors) { + colors.setDossierTemplateId(dossierTemplateId); colorsService.saveColors(convert(colors, ColorsEntity.class)); } @@ -280,6 +293,7 @@ public class DictionaryController implements DictionaryResource { @Override public Colors getColors(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { + return convert(colorsService.getColors(dossierTemplateId), Colors.class); } @@ -294,14 +308,19 @@ public class DictionaryController implements DictionaryResource { List typeResponse = dictionaryPersistenceService.getCumulatedTypes(dossierTemplateId, dossierId); for (TypeEntity res : typeResponse) { - if (res.getDossierId() != null && res.getDossierId().equals(dossierId) && !type.equals(res.getType()) && res.getDossierTemplateId().equals(dossierTemplateId) && labelToCheck.equals(res.getLabel()) - || !type.equals(res.getType()) && res.getDossierTemplateId().equals(dossierTemplateId) && labelToCheck.equals(res.getLabel())) { + if (res.getDossierId() != null && res.getDossierId().equals(dossierId) && !type.equals(res.getType()) && res + .getDossierTemplateId() + .equals(dossierTemplateId) && labelToCheck.equals(res.getLabel()) || !type.equals(res.getType()) && res + .getDossierTemplateId() + .equals(dossierTemplateId) && labelToCheck.equals(res.getLabel())) { throw new ConflictException("Label must be unique."); } } } + private long getCurrentVersion(Type typeResult) { + long currentVersion; if (typeResult.getDossierId() != null) { currentVersion = getVersionForDossier(typeResult.getDossierId()); @@ -311,6 +330,7 @@ public class DictionaryController implements DictionaryResource { return currentVersion; } + private String humanizedDictionaryType(String label) { String str = label; 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 new file mode 100644 index 000000000..c9413c607 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java @@ -0,0 +1,75 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.Test; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import com.google.common.collect.Sets; +import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type; + +import feign.FeignException; + +public class DictionaryTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private DictionaryClient dictionaryClient; + + @Autowired + private DossierTemplateClient dossierTemplateClient; + + + @Test + public void testCreateDossierDictionaryForTwoDossiers() { + + var dossier = dossierTesterAndProvider.provideTestDossier(); + + dictionaryClient.addType(Type.builder() + .type("dossier_redaction") + .label("Dossier Redactions") + .hexColor("#fcba03") + .rank(100) + .isHint(false) + .isCaseInsensitive(false) + .isRecommendation(false) + .description("Something") + .addToDictionaryAction(false) + .dossierTemplateId(dossier.getDossierTemplateId()) + .dossierId(dossier.getId()) + .build()); + + var dossierTemplate = dossierTemplateClient.getDossierTemplate(dossier.getDossierTemplateId()); + + var dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "dossier2"); + + dictionaryClient.addType(Type.builder() + .type("dossier_redaction") + .label("Dossier Redactions") + .hexColor("#fcba03") + .rank(100) + .isHint(false) + .isCaseInsensitive(false) + .isRecommendation(false) + .description("Something") + .addToDictionaryAction(false) + .dossierTemplateId(dossier2.getDossierTemplateId()) + .dossierId(dossier2.getId()) + .build()); + + assertThat(dictionaryClient.getAllTypesForDossierTemplate(dossier.getDossierTemplateId())).isEmpty(); + assertThat(dictionaryClient.getAllTypesForDossier(dossier.getId()).size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypesForDossier(dossier2.getId()).size()).isEqualTo(1); + } + +}