deletion of dossier template on failed import

This commit is contained in:
Kilian Schuettler 2024-08-09 18:40:29 +02:00
parent 8d70c557b1
commit 6342b1b4f6
15 changed files with 80 additions and 24 deletions

View File

@ -109,7 +109,9 @@ public class DossierTemplateImportService {
ImportTemplateResult archiveResult = readDossierTemplateImportArchive(request); ImportTemplateResult archiveResult = readDossierTemplateImportArchive(request);
return importDossierTemplate(archiveResult).getDossierTemplateId(); TemplateImportInfo templateImportInfo = importDossierTemplate(archiveResult);
return templateImportInfo.getDossierTemplateId();
} }
@ -165,7 +167,6 @@ public class DossierTemplateImportService {
} }
throw e; throw e;
} }
return templateImportInfo; return templateImportInfo;
} }

View File

@ -17,6 +17,7 @@ import java.util.List;
import java.util.UUID; import java.util.UUID;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.iqser.red.service.persistence.management.v1.processor.entity.ComponentMappingEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.ComponentMappingEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
@ -229,7 +230,7 @@ public class ComponentMappingService {
return dossierTemplateId + "/" + id + "_" + name + "_" + fileName; return dossierTemplateId + "/" + id + "_" + name + "_" + fileName;
} }
@Transactional
public void deleteByDossierTemplateId(String dossierTemplateId) { public void deleteByDossierTemplateId(String dossierTemplateId) {
componentMappingPersistenceService.getByDossierTemplateId(dossierTemplateId) componentMappingPersistenceService.getByDossierTemplateId(dossierTemplateId)

View File

@ -405,6 +405,7 @@ public class DictionaryManagementService {
} }
@Transactional
public void hardDeleteByDossierTemplateId(String dossierTemplateId) { public void hardDeleteByDossierTemplateId(String dossierTemplateId) {
dictionaryPersistenceService.hardDeleteTypesByDossierTemplateId(dossierTemplateId); dictionaryPersistenceService.hardDeleteTypesByDossierTemplateId(dossierTemplateId);

View File

@ -5,6 +5,10 @@ import java.util.List;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeConfigRepository;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -15,6 +19,9 @@ public class DossierDeletionService {
private final FileDeletionService fileDeletionService; private final FileDeletionService fileDeletionService;
private final DossierService dossierService; private final DossierService dossierService;
private final DictionaryManagementService dictionaryManagementService; private final DictionaryManagementService dictionaryManagementService;
private final DossierAttributePersistenceService dossierAttributePersistenceService;
private final DossierAttributeConfigRepository dossierAttributeConfigRepository;
private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService;
@Transactional @Transactional
@ -45,12 +52,16 @@ public class DossierDeletionService {
} }
@Transactional public void deleteAllDossiersInTemplate(String dossierTemplateId) {
public void deleteAllDossiersInTemplate(String dossierId) {
for (String dossierId : dossierService.getAllDossierIdsForDossierTemplateId(dossierTemplateId)) {
fileDeletionService.hardDeleteFilesAndDataByDossierId(dossierId);
dictionaryManagementService.hardDeleteByDossierId(dossierId);
dossierAttributePersistenceService.deleteDossierAttribute(dossierId);
dossierService.hardDeleteDossier(dossierId);
}
fileDeletionService.hardDeleteFilesAndDataByDossierId(dossierId);
dictionaryManagementService.hardDeleteByDossierId(dossierId);
dossierService.hardDeleteDossier(dossierId);
} }

View File

@ -119,6 +119,7 @@ public class DossierService {
} }
@Transactional
public void hardDeleteDossier(String dossierId) { public void hardDeleteDossier(String dossierId) {
dossierPersistenceService.hardDelete(dossierId); dossierPersistenceService.hardDelete(dossierId);

View File

@ -8,8 +8,11 @@ import java.util.stream.Collectors;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
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.service.persistence.DossierAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplate; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplate;
@ -28,6 +31,10 @@ public class DossierTemplateManagementService {
private final DictionaryManagementService dictionaryManagementService; private final DictionaryManagementService dictionaryManagementService;
private final ComponentMappingService componentMappingService; private final ComponentMappingService componentMappingService;
private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService;
private final DossierAttributePersistenceService dossierAttributePersistenceService;
private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService;
private final ReportTemplatePersistenceService reportTemplatePersistenceService;
private final WatermarkService watermarkService;
public DossierTemplate createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest dossierTemplate) { public DossierTemplate createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest dossierTemplate) {
@ -50,10 +57,13 @@ public class DossierTemplateManagementService {
public void deleteDossierTemplateCompletely(String dossierTemplateId) { public void deleteDossierTemplateCompletely(String dossierTemplateId) {
watermarkService.deleteByDossierTemplateId(dossierTemplateId);
reportTemplatePersistenceService.deleteAllByDossierTemplateId(dossierTemplateId);
fileAttributeConfigPersistenceService.deleteByDossierTemplateId(dossierTemplateId); fileAttributeConfigPersistenceService.deleteByDossierTemplateId(dossierTemplateId);
dictionaryManagementService.hardDeleteByDossierTemplateId(dossierTemplateId); dictionaryManagementService.hardDeleteByDossierTemplateId(dossierTemplateId);
componentMappingService.deleteByDossierTemplateId(dossierTemplateId); componentMappingService.deleteByDossierTemplateId(dossierTemplateId);
dossierDeletionService.deleteAllDossiersInTemplate(dossierTemplateId); dossierDeletionService.deleteAllDossiersInTemplate(dossierTemplateId);
dossierAttributeConfigPersistenceService.deleteAllDossierAttributeConfigsInTemplate(dossierTemplateId);
dossierTemplatePersistenceService.deleteDossierTemplate(dossierTemplateId); dossierTemplatePersistenceService.deleteDossierTemplate(dossierTemplateId);
} }

View File

@ -70,7 +70,8 @@ public class WatermarkService {
validateWatermarkNameIsUnique(watermark.getName(), loadedWatermark.get().getDossierTemplateId(), loadedWatermark.get().getId()); validateWatermarkNameIsUnique(watermark.getName(), loadedWatermark.get().getDossierTemplateId(), loadedWatermark.get().getId());
BeanUtils.copyProperties(watermark, loadedWatermark.get(), "dossierTemplateId", "createdBy", "dateAdded", "dateModified"); BeanUtils.copyProperties(watermark, loadedWatermark.get(), "dossierTemplateId", "createdBy", "dateAdded", "dateModified");
loadedWatermark.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); loadedWatermark.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
var dossierTemplate = dossierTemplateRepository.findById(watermark.getDossierTemplateId()).orElseThrow(() -> new NotFoundException("Dossier Template not found")); var dossierTemplate = dossierTemplateRepository.findById(watermark.getDossierTemplateId())
.orElseThrow(() -> new NotFoundException("Dossier Template not found"));
loadedWatermark.get().setDossierTemplate(dossierTemplate); loadedWatermark.get().setDossierTemplate(dossierTemplate);
return loadedWatermark.get(); return loadedWatermark.get();
} else { // if not found by id -> add it as a new watermark } else { // if not found by id -> add it as a new watermark
@ -79,7 +80,8 @@ public class WatermarkService {
WatermarkEntity watermarkEntity = new WatermarkEntity(); WatermarkEntity watermarkEntity = new WatermarkEntity();
BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified"); BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified");
watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
var dossierTemplate = dossierTemplateRepository.findById(watermark.getDossierTemplateId()).orElseThrow(() -> new NotFoundException("Dossier Template not found")); var dossierTemplate = dossierTemplateRepository.findById(watermark.getDossierTemplateId())
.orElseThrow(() -> new NotFoundException("Dossier Template not found"));
watermarkEntity.setDossierTemplate(dossierTemplate); watermarkEntity.setDossierTemplate(dossierTemplate);
return watermarkRepository.save(watermarkEntity); return watermarkRepository.save(watermarkEntity);
} }
@ -89,7 +91,8 @@ public class WatermarkService {
WatermarkEntity watermarkEntity = new WatermarkEntity(); WatermarkEntity watermarkEntity = new WatermarkEntity();
BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified"); BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified");
watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
var dossierTemplate = dossierTemplateRepository.findById(watermark.getDossierTemplateId()).orElseThrow(() -> new NotFoundException("Dossier Template not found")); var dossierTemplate = dossierTemplateRepository.findById(watermark.getDossierTemplateId())
.orElseThrow(() -> new NotFoundException("Dossier Template not found"));
watermarkEntity.setDossierTemplate(dossierTemplate); watermarkEntity.setDossierTemplate(dossierTemplate);
return watermarkRepository.save(watermarkEntity); return watermarkRepository.save(watermarkEntity);
} }
@ -168,4 +171,11 @@ public class WatermarkService {
return count != 0; return count != 0;
} }
@Transactional
public void deleteByDossierTemplateId(String dossierTemplateId) {
watermarkRepository.deleteByDossierTemplateId(dossierTemplateId);
}
} }

View File

@ -341,20 +341,21 @@ public class DictionaryPersistenceService {
public void hardDeleteTypesByDossierTemplateId(String dossierTemplateId) { public void hardDeleteTypesByDossierTemplateId(String dossierTemplateId) {
for (TypeEntity typeEntity : typeRepository.findAllByDossierTemplateId(dossierTemplateId)) { for (TypeEntity typeEntity : typeRepository.findAllByDossierTemplateId(dossierTemplateId)) {
entryRepository.deleteAllByTypeId(typeEntity.getType()); entryRepository.deleteAllByTypeId(typeEntity.getId());
falsePositiveEntryRepository.deleteAllByTypeId(typeEntity.getType()); falsePositiveEntryRepository.deleteAllByTypeId(typeEntity.getId());
falseRecommendationEntryRepository.deleteAllByTypeId(typeEntity.getType()); falseRecommendationEntryRepository.deleteAllByTypeId(typeEntity.getId());
typeRepository.deleteById(typeEntity.getId()); typeRepository.deleteById(typeEntity.getId());
} }
} }
@Transactional
public void hardDeleteTypesByDossierId(String dossierId) { public void hardDeleteTypesByDossierId(String dossierId) {
for (TypeEntity typeEntity : typeRepository.findByDossierId(dossierId)) { for (TypeEntity typeEntity : typeRepository.findByDossierId(dossierId)) {
entryRepository.deleteAllByTypeId(typeEntity.getType()); entryRepository.deleteAllByTypeId(typeEntity.getId());
falsePositiveEntryRepository.deleteAllByTypeId(typeEntity.getType()); falsePositiveEntryRepository.deleteAllByTypeId(typeEntity.getId());
falseRecommendationEntryRepository.deleteAllByTypeId(typeEntity.getType()); falseRecommendationEntryRepository.deleteAllByTypeId(typeEntity.getId());
typeRepository.deleteById(typeEntity.getId()); typeRepository.deleteById(typeEntity.getId());
} }
} }

View File

@ -135,4 +135,11 @@ public class DossierAttributeConfigPersistenceService {
return result.isPresent() ? result.get().getId() : null; return result.isPresent() ? result.get().getId() : null;
} }
@Transactional
public void deleteAllDossierAttributeConfigsInTemplate(String dossierTemplateId) {
dossierAttributeConfigRepository.deleteAllByDossierTemplateId(dossierTemplateId);
}
} }

View File

@ -5,7 +5,6 @@ import java.time.temporal.ChronoUnit;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -17,8 +16,6 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
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.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.ComponentMappingService;
import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService;
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.management.v1.processor.service.persistence.repository.TypeRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.TypeRepository;
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
@ -29,7 +26,9 @@ import jakarta.transaction.Transactional;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE) @FieldDefaults(level = AccessLevel.PRIVATE)
@ -167,7 +166,6 @@ public class DossierTemplatePersistenceService {
} }
@Transactional
public List<DossierTemplateEntity> getAllDossierTemplates() { public List<DossierTemplateEntity> getAllDossierTemplates() {
var allDossierTemplates = dossierTemplateRepository.findAllWhereDeletedIsFalse(); var allDossierTemplates = dossierTemplateRepository.findAllWhereDeletedIsFalse();
@ -177,7 +175,6 @@ public class DossierTemplatePersistenceService {
} }
@Transactional
public DossierTemplateEntity getDossierTemplate(String dossierTemplateId) { public DossierTemplateEntity getDossierTemplate(String dossierTemplateId) {
var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId) var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId)
@ -242,6 +239,4 @@ public class DossierTemplatePersistenceService {
dossierTemplateRepository.saveAndFlush(dossierTemplate); dossierTemplateRepository.saveAndFlush(dossierTemplate);
} }
} }

View File

@ -180,6 +180,7 @@ public class FileAttributeConfigPersistenceService {
for (FileAttributeConfigEntity fileAttribute : getFileAttributes(dossierTemplateId)) { for (FileAttributeConfigEntity fileAttribute : getFileAttributes(dossierTemplateId)) {
deleteFileAttribute(fileAttribute.getId()); deleteFileAttribute(fileAttribute.getId());
} }
fileAttributesGeneralConfigurationRepository.deleteByDossierTemplateId(dossierTemplateId);
} }

View File

@ -77,4 +77,14 @@ public class ReportTemplatePersistenceService {
} }
} }
@Transactional
public void deleteAllByDossierTemplateId(String dossierTemplateId) {
for (ReportTemplateEntity reportTemplateEntity : findByDossierTemplateId(dossierTemplateId)) {
delete(reportTemplateEntity.getTemplateId());
}
}
} }

View File

@ -19,4 +19,6 @@ public interface DossierAttributeConfigRepository extends JpaRepository<DossierA
@Param("dossierAttributeId") String dossierAttributeId, @Param("dossierAttributeId") String dossierAttributeId,
@Param("label") String label); @Param("label") String label);
void deleteAllByDossierTemplateId(String dossierTemplateId);
} }

View File

@ -6,4 +6,6 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.configur
public interface FileAttributesGeneralConfigurationRepository extends JpaRepository<FileAttributesGeneralConfigurationEntity, String> { public interface FileAttributesGeneralConfigurationRepository extends JpaRepository<FileAttributesGeneralConfigurationEntity, String> {
void deleteByDossierTemplateId(String dossierTemplateId);
} }

View File

@ -10,4 +10,7 @@ public interface WatermarkRepository extends JpaRepository<WatermarkEntity, Long
List<WatermarkEntity> findByDossierTemplateId(String dossierTemplateId); List<WatermarkEntity> findByDossierTemplateId(String dossierTemplateId);
void deleteByDossierTemplateId(String dossierTemplateId);
} }