RED-6467: Changed unique name check to not use Exceptions to prevent transaction rollbacks

This commit is contained in:
Viktor Seifert 2023-04-20 14:27:27 +02:00
parent 30cf937c6b
commit ffecae23b3
3 changed files with 22 additions and 19 deletions

View File

@ -709,22 +709,16 @@ public class DossierTemplateImportService {
private void validateDossierTemplateName(DossierTemplate dossierTemplateMeta) {
boolean cond = true;
int index = 0;
int nameSuffix = 0;
String dossierTemplateName = dossierTemplateMeta.getName();
do {
try {
dossierTemplatePersistenceService.validateDossierTemplateNameIsUnique(dossierTemplateMeta.getName());
cond = false;
} catch (ConflictException e) {
if (index == 0) {
dossierTemplateMeta.setName("Copy of " + dossierTemplateName);
} else {
dossierTemplateMeta.setName("Copy of " + dossierTemplateName + " - " + index);
}
index++;
while (!dossierTemplatePersistenceService.isDossierTemplateNameUnique(dossierTemplateMeta.getName())) {
if (nameSuffix == 0) {
dossierTemplateMeta.setName("Copy of " + dossierTemplateName);
} else {
dossierTemplateMeta.setName("Copy of " + dossierTemplateName + " - " + nameSuffix);
}
} while (cond);
nameSuffix++;
}
}

View File

@ -73,14 +73,20 @@ public class DossierTemplatePersistenceService {
}
@Transactional
public void validateDossierTemplateNameIsUnique(String templateName) {
getAllDossierTemplates().forEach(existing -> {
if (existing.getName().equals(templateName)) {
throw new ConflictException("DossierTemplate name must be unique");
}
});
if (!isDossierTemplateNameUnique(templateName)) {
throw new ConflictException("DossierTemplate name must be unique");
}
}
@Transactional
public boolean isDossierTemplateNameUnique(String templateName) {
return dossierTemplateRepository.existsByName(templateName);
}

View File

@ -17,4 +17,7 @@ public interface DossierTemplateRepository extends JpaRepository<DossierTemplate
@Query("select d from DossierTemplateEntity d where d.id = :dossierTemplateId and d.softDeleteTime is null")
Optional<DossierTemplateEntity> findByIdAndNotDeleted(String dossierTemplateId);
boolean existsByName(String name);
}