From 808ce8cbaf095c94f6e7e295d1b854a8c104944d Mon Sep 17 00:00:00 2001 From: maverickstuder Date: Fri, 21 Jun 2024 12:00:39 +0200 Subject: [PATCH 1/3] fixed duplicate version numbers in migrations --- ...MongoMigration17.java => StorageToMongoMigration18.java} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/{StorageToMongoMigration17.java => StorageToMongoMigration18.java} (84%) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/StorageToMongoMigration17.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/StorageToMongoMigration18.java similarity index 84% rename from persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/StorageToMongoMigration17.java rename to persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/StorageToMongoMigration18.java index 3fc03b85d..c03ff849e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/StorageToMongoMigration17.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/StorageToMongoMigration18.java @@ -11,15 +11,15 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Setter @Service -public class StorageToMongoMigration17 extends Migration { +public class StorageToMongoMigration18 extends Migration { private final StorageToMongoCopyService storageToMongoCopyService; private static final String NAME = "Migration for entity log storage from s3 to mongodb"; - private static final long VERSION = 17; + private static final long VERSION = 18; - public StorageToMongoMigration17(StorageToMongoCopyService storageToMongoCopyService) { + public StorageToMongoMigration18(StorageToMongoCopyService storageToMongoCopyService) { super(NAME, VERSION); this.storageToMongoCopyService = storageToMongoCopyService; From 4af3ada659486a27d303f83786c088ffbfb0390f Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Fri, 21 Jun 2024 13:53:23 +0200 Subject: [PATCH 2/3] RED-9392: added new entity DownloadStatusReportEntity and corresponding repository DownloadStatusReportRepository --- .../download/DownloadStatusReportEntity.java | 40 +++++++++++++++++++ .../ReportTemplatePersistenceService.java | 6 ++- .../DownloadStatusReportRepository.java | 27 +++++++++++++ .../db/changelog/db.changelog-tenant.yaml | 4 +- ...ey-constraint-download-status-reports.yaml | 9 +++++ 5 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusReportEntity.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusReportRepository.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/130-add-primary-key-constraint-download-status-reports.yaml diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusReportEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusReportEntity.java new file mode 100644 index 000000000..5f34b3603 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/download/DownloadStatusReportEntity.java @@ -0,0 +1,40 @@ +package com.iqser.red.service.persistence.management.v1.processor.entity.download; + +import java.io.Serializable; + +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Entity +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "download_status_reports") +public class DownloadStatusReportEntity { + + @EmbeddedId + private DownloadStatusReportId downloadStatusReportId; + + @Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public class DownloadStatusReportId implements Serializable { + + @Column(name = "download_status_entity_storage_id") + private String downloadStatusEntityStorageId; + + @Column(name = "reports_template_id") + private String reportsTemplateId; + + } + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java index bf4d4b1fb..1a8ddc47c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java @@ -4,16 +4,16 @@ import java.time.OffsetDateTime; import java.time.temporal.ChronoUnit; import java.util.List; -import jakarta.transaction.Transactional; - import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; 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.DownloadStatusReportRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @Service @@ -22,6 +22,7 @@ public class ReportTemplatePersistenceService { private final ReportTemplateRepository reportTemplateRepository; private final DossierTemplateRepository dossierTemplateRepository; + private final DownloadStatusReportRepository downloadStatusReportRepository; public void insert(String dossierTemplateId, String templateId, String storageId, String templateName, boolean activeByDefault, boolean multiFileReport) { @@ -43,6 +44,7 @@ public class ReportTemplatePersistenceService { @Transactional public void delete(String templateId) { + downloadStatusReportRepository.deleteByReportsTemplateId(templateId); reportTemplateRepository.deleteById(templateId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusReportRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusReportRepository.java new file mode 100644 index 000000000..c8022b283 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusReportRepository.java @@ -0,0 +1,27 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusReportEntity; + +public interface DownloadStatusReportRepository extends JpaRepository { + + @Modifying(flushAutomatically = true, clearAutomatically = true) + @Query("DELETE FROM DownloadStatusReportEntity d WHERE d.downloadStatusReportId.downloadStatusEntityStorageId = :downloadStatusEntityStorageId") + void deleteByDownloadStatusReportId(@Param("downloadStatusEntityStorageId") String downloadStatusEntityStorageId); + + + @Modifying(flushAutomatically = true, clearAutomatically = true) + @Query("DELETE FROM DownloadStatusReportEntity d WHERE d.downloadStatusReportId.reportsTemplateId = :reportsTemplateId") + void deleteByReportsTemplateId(@Param("reportsTemplateId") String reportsTemplateId); + + + @Query("SELECT d FROM DownloadStatusReportEntity d WHERE d.downloadStatusReportId.reportsTemplateId = :reportsTemplateId") + List findByReportsTemplateId(@Param("reportsTemplateId") String reportsTemplateId); + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml index ecc6424e1..76065253f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml @@ -210,4 +210,6 @@ databaseChangeLog: - include: file: db/changelog/tenant/126-add-uuid-to-download-status.yaml - include: - file: db/changelog/tenant/129-add-component-table.yaml \ No newline at end of file + file: db/changelog/tenant/129-add-component-table.yaml + - include: + file: db/changelog/tenant/130-add-primary-key-constraint-download-status-reports.yaml \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/130-add-primary-key-constraint-download-status-reports.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/130-add-primary-key-constraint-download-status-reports.yaml new file mode 100644 index 000000000..5998cc94b --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/130-add-primary-key-constraint-download-status-reports.yaml @@ -0,0 +1,9 @@ +databaseChangeLog: + - changeSet: + id: add-primary-key-constraint-download-status-reports + author: ali + changes: + - addPrimaryKey: + columnNames: download_status_entity_storage_id,reports_template_id + constraintName: download_status_reports_pkey + tableName: download_status_reports \ No newline at end of file From a05bbc9c7ffb7bff551a5c1fc0d8894c32c6b90b Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Fri, 21 Jun 2024 17:22:04 +0200 Subject: [PATCH 3/3] RED-9392: added JUnit test --- .../integration/tests/ReportTemplateTest.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 14bef8fec..4cb71c099 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -4,15 +4,24 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; +import java.util.List; +import java.util.Set; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; +import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.ReportTemplateProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.PrepareDownloadWithOptionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.ReportTemplateUpdateRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; import feign.FeignException; @@ -21,9 +30,21 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + @Autowired private ReportTemplateClient reportTemplateClient; + @Autowired + private DownloadClient downloadClient; + + @Autowired + private FileClient fileClient; + @Autowired private ReportTemplateProvider reportTemplateProvider; @@ -344,4 +365,40 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test + public void testDownloadDossierAndDeleteReportTemplate() { + // Arrange + String fileName = "report.xlsx"; + var dossier = dossierTesterAndProvider.provideTestDossier(); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + fileTesterAndProvider.markFileAsProcessed(dossier.getId(), file.getFileId()); + fileClient.setStatusApproved(dossier.getId(), file.getId()); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossier.getDossierTemplateId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateProvider.provideReportTemplate(dossier.getDossierTemplateId(), fileName); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossier.getDossierTemplateId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getAvailableReportTemplates(dossier.getDossierTemplateId()) + .iterator().next(); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName); + + downloadClient.prepareDownload(PrepareDownloadWithOptionRequest.builder() + .reportTemplateIds(List.of(firstTemplate.getTemplateId())) + .dossierId(dossier.getId()) + .fileIds(List.of(file.getId())) + .build()); + + reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossier.getDossierTemplateId()); + assertThat(availableTemplates).isEmpty(); + } + }