Pull request #100: RED-2668: Fixed create dossier dictionaries for multiple dossiers

Merge in RED/persistence-service from RED-2668 to master

* commit 'e90b09aa749a26f425f7acb3eeb0d227a8e0f571':
  RED-2668: Fixed create dossier dictionaries for multiple dossiers
This commit is contained in:
Dominique Eiflaender 2021-11-03 11:31:06 +01:00
commit 4e86f6973e
2 changed files with 113 additions and 18 deletions

View File

@ -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<String> entries,
public void addEntries(@PathVariable(TYPE_PARAMETER_NAME) String typeId, @RequestBody List<String> entries,
@RequestParam(value = "removeCurrent", required = false, defaultValue = "false") boolean removeCurrent) {
List<String> cleanEntries = entries.stream().map(this::cleanDictionaryEntry).collect(toList());
validateEntries(cleanEntries);
@ -79,7 +79,7 @@ public class DictionaryController implements DictionaryResource {
List<String> 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<String> entries) {
public void deleteEntries(@PathVariable(TYPE_PARAMETER_NAME) String typeId, @RequestBody List<String> 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<Type> getAllTypesForDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) {
public List<Type> getAllTypesForDossierTemplate(
@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) {
return convert(dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId), Type.class);
}
@Override
public List<Type> 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<DictionaryEntry> 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<TypeEntity> 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;

View File

@ -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);
}
}