Pull request #146: RED-2808: Check if dossier template name is unique in code, as uniqueConstraint on name and nullable soft_delete_time column is not working

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

* commit 'af68d2f74f82e7c160f3e6f3a83cedd9bd7b7089':
  RED-2808: Check if dossier template name is unique in code, as uniqueConstraint on name and nullable soft_delete_time column is not working
This commit is contained in:
Dominique Eiflaender 2021-12-06 14:44:57 +01:00
commit 11a7af57e4
4 changed files with 24 additions and 9 deletions

View File

@ -21,7 +21,7 @@ import java.util.Set;
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "dossier_template", uniqueConstraints={@UniqueConstraint(columnNames = {"name", "soft_delete_time"})})
@Table(name = "dossier_template")
public class DossierTemplateEntity {
@Id

View File

@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
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.DossierTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
@ -31,6 +32,11 @@ public class DossierTemplatePersistenceService {
if (createOrUpdateDossierRequest.getDossierTemplateId() != null) {
Optional<DossierTemplateEntity> dossierTemplate = dossierTemplateRepository.findById(createOrUpdateDossierRequest.getDossierTemplateId());
if (dossierTemplate.isPresent()) {
if(!dossierTemplate.get().getName().equals(createOrUpdateDossierRequest.getName())){
validateDossierTemplateNameIsUnique(createOrUpdateDossierRequest.getName());
}
// order is important
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get());
dossierTemplate.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
@ -40,6 +46,7 @@ public class DossierTemplatePersistenceService {
throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, createOrUpdateDossierRequest.getDossierTemplateId()));
}
} else {
validateDossierTemplateNameIsUnique(createOrUpdateDossierRequest.getName());
DossierTemplateEntity dossierTemplate = new DossierTemplateEntity();
dossierTemplate.setId(UUID.randomUUID().toString());
// order is important
@ -51,6 +58,13 @@ public class DossierTemplatePersistenceService {
}
public void validateDossierTemplateNameIsUnique(String templateName){
getAllDossierTemplates().forEach(existing -> {
if(existing.getName().equals(templateName)){
throw new ConflictException("DossierTemplate name must be unique");
}
});
}
public List<DossierTemplateEntity> getAllDossierTemplates() {
return dossierTemplateRepository.findAllWhereDeletedIsFalse();

View File

@ -1431,14 +1431,6 @@ databaseChangeLog:
referencedColumnNames: id
referencedTableName: dossier_template
validate: true
- changeSet:
id: 1637073006104-55
author: generated
changes:
- addUniqueConstraint:
columnNames: name, soft_delete_time
constraintName: uknuk7ickn8wqo3d7tlht6t54rn
tableName: dossier_template
- changeSet:
id: 1637073006104-56
author: generated

View File

@ -74,4 +74,13 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(dossierTemplateClient.getAllDossierTemplates().isEmpty()).isTrue();
}
@Test(expected = FeignException.class)
public void testDossierTemplateUniqueNameConflict(){
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var dossierTemplate2 = dossierTemplateTesterAndProvider.provideTestTemplate();
}
}