From 740b9ba040914b45c38656814bf6c2d5ae189aaa Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Wed, 3 May 2023 13:04:33 +0200 Subject: [PATCH 1/4] RED-6270: Repackaged incorrectly packaged dossier template and created dossier template import test that always runs (it does not have local dependencies) --- .../tests/DossierTemplateImportTest.java | 50 ++++++++++++++---- .../EFSA_sanitisation_GFL_v1.zip | Bin 557743 -> 553481 bytes 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java index 59993129d..cde9b34c4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java @@ -43,8 +43,9 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT @SneakyThrows @Test + // For local testing, so disabled for CI @Disabled - public void testDossierTemplateImport() { + public void testLocalDossierTemplateImport() { var importDir = new File("/Users/timobejan/work/dossier-templates-v2/dev"); assertThat(importDir).isNotNull(); @@ -55,13 +56,7 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT if (file.isDirectory()) { var archive = pack(file.getAbsolutePath()); log.info("Importing file: " + file.getName() + " " + " with size: " + archive.length); - var request = new ImportDossierTemplateRequest(); - request.setArchive(archive); - request.setUpdateExistingDossierTemplate(false); - request.setUserId("system"); - DossierTemplate dossierTemplate = dossierTemplateManagementService.importDossierTemplate(request); - assertThat(dossierTemplate).isNotNull(); - assertThat(dossierTemplate.getId()).isNotBlank(); + testDossierTemplateImport(archive); } } } @@ -93,12 +88,47 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT } + @SneakyThrows + @Test + public void testDossierTemplateImport() { + + TenantContext.setTenantId("redaction"); + + var archive = loadFileFromClasspath("EFSA_sanitisation_GFL_v1.zip"); + testDossierTemplateImport(archive); + } + + + @SneakyThrows + private byte[] loadFileFromClasspath(String filename) { + + ClassPathResource classPathResource = new ClassPathResource(DOSSIERTEMPLATES_PATH + filename); + assertThat(classPathResource.exists()).isTrue(); + try (InputStream inputStream = classPathResource.getInputStream()) { + return inputStream.readAllBytes(); + } + } + + + private void testDossierTemplateImport(byte[] archive) { + + var request = new ImportDossierTemplateRequest(); + request.setArchive(archive); + request.setUpdateExistingDossierTemplate(false); + request.setUserId("system"); + DossierTemplate dossierTemplate = dossierTemplateManagementService.importDossierTemplate(request); + assertThat(dossierTemplate).isNotNull(); + assertThat(dossierTemplate.getId()).isNotBlank(); + } + + @Test @SneakyThrows + // This is currently not working, since there seems to be some missing Feign decoder config for tests @Disabled public void dossierImportClientTest() { - var multipartFile = loadDossierTemplateFromClasspath("EFSA_sanitisation_GFL_v1.zip"); + var multipartFile = loadMultiPartFileFromClasspath("EFSA_sanitisation_GFL_v1.zip"); DossierTemplateModel dossierTemplateModel = dossierTemplateClient.importDossierTemplate(multipartFile, null, false); assertThat(dossierTemplateModel).isNotNull(); assertThat(dossierTemplateModel.getId()).isNotBlank(); @@ -107,7 +137,7 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT @SneakyThrows - private MockMultipartFile loadDossierTemplateFromClasspath(String filename) { + private MockMultipartFile loadMultiPartFileFromClasspath(String filename) { ClassPathResource classPathResource = new ClassPathResource(DOSSIERTEMPLATES_PATH + filename); assertThat(classPathResource.exists()).isTrue(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1.zip index 79b0004ebfc3c6a802e3d9cd7d50b4a9e550451f..1346866d7d0f2720f4c19a23ff455aea8224b7fb 100644 GIT binary patch delta 3467 zcmZWsdvHuw7~i}1+?y}*z$KexC7Tzi1_`w@MU}LaD%Dg_&%}}yiDZ{VydMee)N7{n zj~qITshJLaP|;?tdKNWWOtn)p`kz`r#$rz94OgJqkY`evuJvL0?UbLeWWrYGL9%}IEBTwyOdD(E7g&3==+|rI0TOFV!(qDoTzexfea&&%+un#= zzi>`&ki^XYUXXPLG~f3Z<N=GoWfaJ{Zh9xkyMH0wE6Rc};8{+8xdf6|9(?*I)eT9DBuSrQ~6e6#g264jK(0uVVxt9p?muna#X{IM$ zm#ZXkBztb4xfA)dxheN&T|%Qc-Z&lF@kve<_@4NE2Swr1UTjm!E7> zUSwfpO?#xI7*^f)NEs!yq6kWTfeK%V*lawJ5}qhMSrUy(o+!PIB;<#lpcIsbwTe1N zAhOs-7@Pl;D&yUR;ldeAlTCkiuGrAVXy% zIVwK^Yl_wk4U(3MO`B?^4F8Y)FazOYTuq`@t!%q+1r@=R;}vd zyJ~T=bn?TWA4)8RmN6{J3n4;3psRf&SZ5RLzX%jwJRPD$P?;?aappOyeAOa|G*sPk z=CJBy;k3YmBkJ?vhKhRslj@0stSforFi9W0Hf;Ank-nZ>5b3Mu=R!~X3Y2K|z_n zyqxzafKJ5o@Y_CcX%Qxw!c#MGx@F^GsMf*6DZDJgu~d!MTo!z97UEd4M)MmL&L zAXfY1Q@|VF&O+&S(WLOoAXYr$Xl@H94>|mkDKO3^V>RI!1t?=HlTYECBD}T$-muNn zWbpksPmIZ@FlSyyK9=nmzB-6v{N#T|u6OH@fz^D1mTK|bPdJwKRFMbA3qa@-riXns2l<~LnK;?@HAu`sQfT@3l$U?FLOzRobz!hsf`c+p#tdMHWG|hSf zyOBnnWQ;9CZWE3z#UldGE5a>5Js66)>s4gzD}r2GN=zgi8&8_J*u}-@X}!P~>yd%| z$Rp%DQxw_(|8`91`gs0E2KK2=;)*|I9GeNz%onm6y(?GKOeyKCJ|pAY5*T4ybnpYj zshRPpQW#`2y6-W==;0emA={P}4R;g=4+~&cDCSBez}^24UmbwgY}pdifOt~?MrmzK zK1Eh}5AlUT$g$PA?Sx}vj1`+r41)J*X}Ls3?3Ib)95x0*38aOYb5ksy`$&^!!eHCn z0|>{q8Y>P1-9@s*Sw-9MKxuBd#vLzm&y%)Hf6l(H$nzaFpMwnx_@5r}RK(>pS zA(B?>(1>k6izM;#oY@c=W38sU1;MypTV{hdrnTu$BBVSv{KdT@yRAqMM?1%7!)RMc zT}n8H7wy=(|o%&QV9$JK_9&TBtct7F;7sC)+^6{gH({qNOUW~DI zwKx^72n!kUtrJC!FWc4@1`Y*$*DradEtC+BZy~q1L<_3G+rio(&JBYW4e5srW8VVFbzru+}Mg55m; delta 7760 zcma)>eNa@_6~K8s-sZ+q#v}%XaF<;`MIP)bE(iuAR+OO9ARk$Ry36wEhL1(SOxtv( zv1uo9QWKrDIr$pLWNb2%i4lzC8AsEYPSQ4+e*DpY!q~=86{Jn7>5M_TV9$FG7w&U7 zug)<3!TFtY-nr-8bIxV|MfdTaXBN>M2=;}#!~NmDP=7em9W39xE%?|f zFaCZh_4`B4WxRkAfL~Oxw855B5?@J)J?VCo1+Xq%$(ZjALQgkbOveC-{tEP9VJ-jXPMxxi7kSCb+?9+7=n^hGw&rXObGf8IiMSqgv`e9 z6EgG}*-l^G(uA@G21aD6qm)c2Zo1`Zp$Vl zQYogpIRqxLu*hoxzT3vqw4;;C4k?=qX4l@n{$OuwOQ^ZutXH}Yi=v86W1p)q*4Q~G zKl#0=;-uRdxOTHe+P|X8LlVy>b*-OPR=CLiA8GD2&w-BMk!hvS#_!>2JHNH)v~tkK z<)MR)kB`wVS5;IPF1tvVb*b5qlQDop1CC_)+dGa_zMc%HA?NAD+tPj9(JAq@l(dG@ zyS~FWP%@_FlrDC+d0m#<3xEHNBcCo(nCfDSwO7tKu1GwCQm8%sfn&v;oUXug-7H=E z>+c-L&hbr@GB5;>?!V*oIh&cFX)Cjt2_UhDr2=-OL~URztFW66rnWJ!%?+@!k`>y_ z1C@JN#+*L%awSXT%c(Ec-l}B1@oGw(KI-cK7MlOfznMT}5A(pYemw4*0k*)c1N0T+ zsbbsIf|vyt0zbl^`L_aGU3RJ~1)w9I0G@ZnFNOm>ED`v2<||wykPAH0{HEqEE!P@Y zx~X8Dpdk4FD!@uj(W7Iy;e@LlEWwDAnibQh2kSJY4=SqJR@D~+^k79v0QaN&z}tXU z|5(j@1zrJteWl&U@9p0m>4kkgIJFhjFrQi|@NW#t^9N5~rFN+$0x(GdxKm}C0ZOSw zQ?p^wzq0lOWhz*UVJQ|&^}I^~xOp|IVldibC+!mWkP$kJccW9qCH;MXY_a3M^EtB+!V z=xDx}ME{}CTXts)`x8Ijuln7mX2v|w1GME5;Xb_o2-{+D`56+xbuv}2=~C4bGoyz! zWt1|53uc`qQ#OrJz*qy`v-b-YUL*lrH#5uvesd>oQL!5ia$9FQ!8MZqbO+mPDN4^3 z%0t{tlg-Nw4f?!dp$&`^sJ^hm6Fn>ibkdTZ6BMbhu=SP_E&nHB3UHTonqfJ=<5qsm zrnjCSuadm6zz*-i;}$Q|%k~tmy;T-pfA$sSE7}UE4+v-eISJq%+^UudK*86P1q6(R zxJFe43P?(6WYv}rshpzB;Bp+W0LA}JAi5PU$pK3hdaf%3P!VDc@Ep!K%k(4MI7!Ir z8>|=hwXht$C>FriA-r_O+WiT|Lt+!F^R5u$B}Z)xnqB+3CM*nbSlVJs8ncd0TKfHq z6bZP0b2HBmw9GAk)fIDGj}$I-L{yJ8vvSLDmor5HxUMfY?*O#wgU5m_iN88c5s?;F zy(&NElM8*iL;*9ayb+XeD}LFB4J=tL5)>5Nq%7i!pKeA5dEe|{{0vDQZ@q0W{u2q{ z8-R5%Zju~Cupe(@eoK)IkN`dh;JvOl%cOQ3rNv2Di6?AXo(X0qVbmh@iRPI;(MYL+ zPup3UWej_T1n@DT){`w9*nJ6vv-*pHF-_bVW{tA)VkUPyye_7pybRHaQvg1p1l3J~g=+`zAnqvr%>}kcSfypA9<62sH4wRNrp~UR z0DO*VfQ~L~9w%!lxgYf0HbuwPQ2;*6q?uRdOFftk;yhhLqWE0Xq%Id?^)?Bd+r!o- S)x_1rHR4}uit8Dc#s2`|r~1(V From 5f119aa9961624d72edbcec8af83505a9ec6c820 Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Fri, 5 May 2023 14:48:02 +0200 Subject: [PATCH 2/4] RED-6270: Removed transactional annotation on the dossier-template import, since it uses both Hibernate and JDBC (for runtime performance reasons) and otherwise runs into query ordering issues --- .../v1/processor/service/DossierTemplateImportService.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java index 01c3cc447..43fc66c09 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java @@ -22,8 +22,6 @@ import java.util.UUID; import java.util.function.Function; import java.util.stream.Collectors; -import javax.transaction.Transactional; - import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; @@ -108,7 +106,6 @@ public class DossierTemplateImportService { private final FileManagementServiceSettings settings; - @Transactional public String importDossierTemplate(ImportDossierTemplateRequest request) { ImportTemplateResult archiveResult = this.handleArchive(request); From 9b9c79fc9923b4ba2c5183a02a388be01c01da4f Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Fri, 5 May 2023 15:55:31 +0200 Subject: [PATCH 3/4] RED-6270: Added try-with-resources to correctly close file stream --- .../service/export/DossierTemplateExportService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java index c5f57e614..6a9c23372 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java @@ -5,6 +5,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.List; import java.util.stream.Collectors; @@ -264,7 +265,11 @@ public class DossierTemplateExportService { private void storeZipFile(String storageId, FileSystemBackedArchiver fileSystemBackedArchiver) { long start = System.currentTimeMillis(); - fileManagementStorageService.storeObject(storageId, fileSystemBackedArchiver.toInputStream()); + try (InputStream data = fileSystemBackedArchiver.toInputStream()) { + fileManagementStorageService.storeObject(storageId, data); + } catch (IOException ex) { + log.warn("IO error when sending file to storage", ex); + } log.info("Successfully stored zip for downloadId {}, took {}", storageId, System.currentTimeMillis() - start); } From c6045189e6b964a3e44d98759bc54c461649bd06 Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Fri, 5 May 2023 16:30:09 +0200 Subject: [PATCH 4/4] RED-6270: Changed data access to avoid lazy loading, making it possible to run the dossier-template import outside an enclosing transaction --- .../service/DossierTemplateImportService.java | 13 ++----------- .../DossierTemplatePersistenceService.java | 11 +++++++++++ .../LegalBasisMappingPersistenceService.java | 11 +++++++++++ .../persistence/repository/TypeRepository.java | 11 ++++++++++- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java index 43fc66c09..58e233ad4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java @@ -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 currentTypes = dossierTemplatePersistenceService.getDossierTemplate(dossierTemplateId) - .getDossierTypes() - .stream() - .filter(t -> t.getDossierId() == null) - .collect(Collectors.toList()); + List 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 { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index d2402cc0f..6848ee5f2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -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 getTypesForDossierTemplate(String dossierTemplateId) { + + return typeRepository.findAllByDossierTemplateIdAndDossierId(dossierTemplateId, null); + } + + @Transactional public void deleteDossierTemplate(String dossierTemplateId, String deletingUserId) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java index 41db7acd2..572199ee9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java @@ -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(() -> { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java index cd8e77e74..bed9413ec 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java @@ -37,6 +37,9 @@ public interface TypeRepository extends JpaRepository { List findAllTypesByDossierTemplateIdOrDossierId(String dossierTemplateId, String dossierId); + List 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 { 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 findDictionarySummaryList(Set dossierTemplateIds);