Merge remote-tracking branch 'origin/master' into RED-9140

This commit is contained in:
Andrei Isvoran 2024-06-26 11:37:45 +03:00
commit e09d2d86a9
7 changed files with 143 additions and 6 deletions

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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<DownloadStatusReportEntity, String> {
@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<DownloadStatusReportEntity> findByReportsTemplateId(@Param("reportsTemplateId") String reportsTemplateId);
}

View File

@ -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
file: db/changelog/tenant/129-add-component-table.yaml
- include:
file: db/changelog/tenant/130-add-primary-key-constraint-download-status-reports.yaml

View File

@ -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

View File

@ -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();
}
}