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:
parent
0b6bd4fa22
commit
af68d2f74f
@ -21,7 +21,7 @@ import java.util.Set;
|
|||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Table(name = "dossier_template", uniqueConstraints={@UniqueConstraint(columnNames = {"name", "soft_delete_time"})})
|
@Table(name = "dossier_template")
|
||||||
public class DossierTemplateEntity {
|
public class DossierTemplateEntity {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
|
|||||||
@ -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.entity.dossier.DossierTemplateEntity;
|
||||||
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.DossierTemplateRepository;
|
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;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
|
||||||
@ -31,6 +32,11 @@ public class DossierTemplatePersistenceService {
|
|||||||
if (createOrUpdateDossierRequest.getDossierTemplateId() != null) {
|
if (createOrUpdateDossierRequest.getDossierTemplateId() != null) {
|
||||||
Optional<DossierTemplateEntity> dossierTemplate = dossierTemplateRepository.findById(createOrUpdateDossierRequest.getDossierTemplateId());
|
Optional<DossierTemplateEntity> dossierTemplate = dossierTemplateRepository.findById(createOrUpdateDossierRequest.getDossierTemplateId());
|
||||||
if (dossierTemplate.isPresent()) {
|
if (dossierTemplate.isPresent()) {
|
||||||
|
|
||||||
|
if(!dossierTemplate.get().getName().equals(createOrUpdateDossierRequest.getName())){
|
||||||
|
validateDossierTemplateNameIsUnique(createOrUpdateDossierRequest.getName());
|
||||||
|
}
|
||||||
|
|
||||||
// order is important
|
// order is important
|
||||||
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get());
|
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossierTemplate.get());
|
||||||
dossierTemplate.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
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()));
|
throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, createOrUpdateDossierRequest.getDossierTemplateId()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
validateDossierTemplateNameIsUnique(createOrUpdateDossierRequest.getName());
|
||||||
DossierTemplateEntity dossierTemplate = new DossierTemplateEntity();
|
DossierTemplateEntity dossierTemplate = new DossierTemplateEntity();
|
||||||
dossierTemplate.setId(UUID.randomUUID().toString());
|
dossierTemplate.setId(UUID.randomUUID().toString());
|
||||||
// order is important
|
// 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() {
|
public List<DossierTemplateEntity> getAllDossierTemplates() {
|
||||||
return dossierTemplateRepository.findAllWhereDeletedIsFalse();
|
return dossierTemplateRepository.findAllWhereDeletedIsFalse();
|
||||||
|
|||||||
@ -1431,14 +1431,6 @@ databaseChangeLog:
|
|||||||
referencedColumnNames: id
|
referencedColumnNames: id
|
||||||
referencedTableName: dossier_template
|
referencedTableName: dossier_template
|
||||||
validate: true
|
validate: true
|
||||||
- changeSet:
|
|
||||||
id: 1637073006104-55
|
|
||||||
author: generated
|
|
||||||
changes:
|
|
||||||
- addUniqueConstraint:
|
|
||||||
columnNames: name, soft_delete_time
|
|
||||||
constraintName: uknuk7ickn8wqo3d7tlht6t54rn
|
|
||||||
tableName: dossier_template
|
|
||||||
- changeSet:
|
- changeSet:
|
||||||
id: 1637073006104-56
|
id: 1637073006104-56
|
||||||
author: generated
|
author: generated
|
||||||
|
|||||||
@ -74,4 +74,13 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
|||||||
assertThat(dossierTemplateClient.getAllDossierTemplates().isEmpty()).isTrue();
|
assertThat(dossierTemplateClient.getAllDossierTemplates().isEmpty()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test(expected = FeignException.class)
|
||||||
|
public void testDossierTemplateUniqueNameConflict(){
|
||||||
|
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||||
|
var dossierTemplate2 = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user