Merge branch 'RED-7049' into 'master'
RED-7049 - Wrong error code when adding entity with already existing rank Closes RED-7049 See merge request redactmanager/persistence-service!371
This commit is contained in:
commit
bc334b9760
@ -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.entity.configuration.TypeEntity;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
|
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.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.DossierRepository;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
|
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) {
|
private void checkRankAlreadyExists(String type, String dossierTemplateId, int rank, String dossierId) {
|
||||||
|
|
||||||
Optional<TypeEntity> existingTypeValueForRank = getTypeForRank(dossierTemplateId, rank, dossierId);
|
List<TypeEntity> existingTypesForRank = getTypesForRank(dossierTemplateId, rank, dossierId);
|
||||||
|
if (!existingTypesForRank.isEmpty()) {
|
||||||
if (existingTypeValueForRank.isPresent() && !existingTypeValueForRank.get().isDeleted() && !existingTypeValueForRank.get().getType().equalsIgnoreCase(type)) {
|
for (var existingTypeValueForRank : existingTypesForRank) {
|
||||||
throw new BadRequestException("Rank already exists: " + rank + " on type: " + existingTypeValueForRank.get().getType());
|
if (!existingTypeValueForRank.isDeleted() && !existingTypeValueForRank.getType().equalsIgnoreCase(type)) {
|
||||||
|
throw new ConflictException("Rank already exists: " + rank + " on type: " + existingTypeValueForRank.getType());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Optional<TypeEntity> getTypeForRank(String dossierTemplateId, int rank, String dossierId) {
|
private List<TypeEntity> getTypesForRank(String dossierTemplateId, int rank, String dossierId) {
|
||||||
|
|
||||||
return typeRepository.findOneByDossierTemplateIdAndDossierIdAndRank(dossierTemplateId, dossierId, rank);
|
return typeRepository.findByDossierTemplateIdAndDossierIdAndRank(dossierTemplateId, dossierId, rank);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -14,8 +14,14 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
|
|||||||
|
|
||||||
public interface TypeRepository extends JpaRepository<TypeEntity, String> {
|
public interface TypeRepository extends JpaRepository<TypeEntity, String> {
|
||||||
|
|
||||||
@Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplate and t.dossierId = :dossier and t.rank = :rank and t.softDeletedTime is null")
|
@Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplateId and "
|
||||||
Optional<TypeEntity> findOneByDossierTemplateIdAndDossierIdAndRank(@Param("dossierTemplate") String dossierTemplate, @Param("dossier") String dossier, @Param("rank") int rank);
|
+ "(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<TypeEntity> findByDossierTemplateIdAndDossierIdAndRank(@Param("dossierTemplateId") String dossierTemplateId,
|
||||||
|
@Param("dossierId") String dossierId,
|
||||||
|
@Param("rank") int rank);
|
||||||
|
|
||||||
|
|
||||||
List<TypeEntity> findByDossierId(String dossierId);
|
List<TypeEntity> findByDossierId(String dossierId);
|
||||||
|
|||||||
@ -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
|
@Test
|
||||||
public void testAddEntriesToDossierTemplateDictionaryWithDossierDictionaryOnlyFlag() {
|
public void testAddEntriesToDossierTemplateDictionaryWithDossierDictionaryOnlyFlag() {
|
||||||
|
|
||||||
|
|||||||
@ -108,7 +108,7 @@ public class EntityPerformanceTest extends AbstractPersistenceServerServiceTest
|
|||||||
|
|
||||||
var template = dossierTemplateTesterAndProvider.provideTestTemplate("test");
|
var template = dossierTemplateTesterAndProvider.provideTestTemplate("test");
|
||||||
var type1 = typeProvider.testAndProvideType(template, null, "t1");
|
var type1 = typeProvider.testAndProvideType(template, null, "t1");
|
||||||
var type2 = typeProvider.testAndProvideType(template, null, "t2");
|
var type2 = typeProvider.testAndProvideType(template, null, "t2", false,50);
|
||||||
|
|
||||||
List<DictionaryEntryEntity> type1Entries = entries.stream()
|
List<DictionaryEntryEntity> type1Entries = entries.stream()
|
||||||
.map(s -> new DictionaryEntryEntity(0, s, 1, false, type1.getTypeId()))
|
.map(s -> new DictionaryEntryEntity(0, s, 1, false, type1.getTypeId()))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user