RED-6270: Changed data access to avoid lazy loading, making it possible to run the dossier-template import outside an enclosing transaction
This commit is contained in:
parent
9b9c79fc99
commit
c6045189e6
@ -35,7 +35,6 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.BaseDictionaryEntry;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
|
||||
@ -357,11 +356,7 @@ public class DossierTemplateImportService {
|
||||
if (CollectionUtils.isNotEmpty(request.getTypes())) {
|
||||
this.updateTypes(request, dossierTemplateId);
|
||||
} else { // no types to add, but remove existing ones
|
||||
List<TypeEntity> currentTypes = dossierTemplatePersistenceService.getDossierTemplate(dossierTemplateId)
|
||||
.getDossierTypes()
|
||||
.stream()
|
||||
.filter(t -> t.getDossierId() == null)
|
||||
.collect(Collectors.toList());
|
||||
List<TypeEntity> currentTypes = dossierTemplatePersistenceService.getTypesForDossierTemplate(dossierTemplateId);
|
||||
this.deleteTypes(currentTypes, new HashSet<>());
|
||||
}
|
||||
|
||||
@ -390,11 +385,7 @@ public class DossierTemplateImportService {
|
||||
if (CollectionUtils.isNotEmpty(request.getLegalBases())) {
|
||||
legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, request.getLegalBases());
|
||||
} else { // delete existing
|
||||
var existingLegalBasis = legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplateId)
|
||||
.stream()
|
||||
.map(LegalBasisEntity::getName)
|
||||
.collect(Collectors.toList());
|
||||
legalBasisMappingPersistenceService.deleteLegalBasis(dossierTemplateId, existingLegalBasis);
|
||||
legalBasisMappingPersistenceService.deleteLegalBasis(dossierTemplateId);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
@ -12,11 +12,13 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
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.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.management.v1.processor.service.persistence.repository.TypeRepository;
|
||||
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.DossierTemplateStatus;
|
||||
|
||||
@ -32,6 +34,8 @@ public class DossierTemplatePersistenceService {
|
||||
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
|
||||
private final RulesPersistenceService rulesPersistenceService;
|
||||
|
||||
private final TypeRepository typeRepository;
|
||||
|
||||
|
||||
@Transactional
|
||||
public DossierTemplateEntity createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest createOrUpdateDossierRequest) {
|
||||
@ -134,6 +138,13 @@ public class DossierTemplatePersistenceService {
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public List<TypeEntity> getTypesForDossierTemplate(String dossierTemplateId) {
|
||||
|
||||
return typeRepository.findAllByDossierTemplateIdAndDossierId(dossierTemplateId, null);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void deleteDossierTemplate(String dossierTemplateId, String deletingUserId) {
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
|
||||
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -37,6 +38,16 @@ public class LegalBasisMappingPersistenceService {
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void deleteLegalBasis(String dossierTemplateId) {
|
||||
|
||||
var mapping = getLegalBasisMappingOrCreate(dossierTemplateId);
|
||||
mapping.setLegalBasis(Collections.emptyList());
|
||||
mapping.setVersion(mapping.getVersion() + 1);
|
||||
legalBasisMappingRepository.save(mapping);
|
||||
}
|
||||
|
||||
|
||||
private LegalBasisMappingEntity getLegalBasisMappingOrCreate(String dossierTemplateId) {
|
||||
|
||||
return legalBasisMappingRepository.findById(dossierTemplateId).orElseGet(() -> {
|
||||
|
||||
@ -37,6 +37,9 @@ public interface TypeRepository extends JpaRepository<TypeEntity, String> {
|
||||
List<TypeEntity> findAllTypesByDossierTemplateIdOrDossierId(String dossierTemplateId, String dossierId);
|
||||
|
||||
|
||||
List<TypeEntity> findAllByDossierTemplateIdAndDossierId(String dossierTemplateId, String dossierId);
|
||||
|
||||
|
||||
@Query("select coalesce(sum(t.version),0) from TypeEntity t where t.dossierId = :dossierId")
|
||||
long getVersionForDossierId(String dossierId);
|
||||
|
||||
@ -45,7 +48,13 @@ public interface TypeRepository extends JpaRepository<TypeEntity, String> {
|
||||
long getVersionForDossierTemplateId(String dossierTemplateId);
|
||||
|
||||
|
||||
@Query("select new com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionarySummaryResponse(dt.id, t.id, t.type, t.label, count(e)) " + "from DossierTemplateEntity dt " + "left join TypeEntity t on t.dossierTemplateId = dt.id " + "left join DictionaryEntryEntity e on e.typeId = t.id " + "where t.softDeletedTime is null and dt.id in :dossierTemplateIds and t.dossierId is null and (e.id is null or e.deleted = false) " + "group by dt.id, t.id, t.type, t.label ")
|
||||
@Query("""
|
||||
select new com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionarySummaryResponse(dt.id, t.id, t.type, t.label, count(e))
|
||||
from DossierTemplateEntity dt
|
||||
left join TypeEntity t on t.dossierTemplateId = dt.id
|
||||
left join DictionaryEntryEntity e on e.typeId = t.id
|
||||
where t.softDeletedTime is null and dt.id in :dossierTemplateIds and t.dossierId is null and (e.entryId is null or e.deleted = false)
|
||||
group by dt.id, t.id, t.type, t.label""")
|
||||
List<DictionarySummaryResponse> findDictionarySummaryList(Set<String> dossierTemplateIds);
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user