diff --git a/bamboo-specs/src/main/java/buildjob/PlanSpec.java b/bamboo-specs/src/main/java/buildjob/PlanSpec.java index 8bf2da382..f0213143b 100644 --- a/bamboo-specs/src/main/java/buildjob/PlanSpec.java +++ b/bamboo-specs/src/main/java/buildjob/PlanSpec.java @@ -1,10 +1,12 @@ package buildjob; -import java.time.DayOfWeek; +import static com.atlassian.bamboo.specs.builders.task.TestParserTask.createJUnitParserTask; + import java.time.LocalTime; import com.atlassian.bamboo.specs.api.BambooSpec; import com.atlassian.bamboo.specs.api.builders.BambooKey; +import com.atlassian.bamboo.specs.api.builders.Variable; import com.atlassian.bamboo.specs.api.builders.docker.DockerConfiguration; import com.atlassian.bamboo.specs.api.builders.permission.PermissionType; import com.atlassian.bamboo.specs.api.builders.permission.Permissions; @@ -15,20 +17,18 @@ import com.atlassian.bamboo.specs.api.builders.plan.PlanIdentifier; import com.atlassian.bamboo.specs.api.builders.plan.Stage; import com.atlassian.bamboo.specs.api.builders.plan.branches.BranchCleanup; import com.atlassian.bamboo.specs.api.builders.plan.branches.PlanBranchManagement; -import com.atlassian.bamboo.specs.api.builders.plan.configuration.ConcurrentBuilds; import com.atlassian.bamboo.specs.api.builders.project.Project; -import com.atlassian.bamboo.specs.api.builders.Variable; -import com.atlassian.bamboo.specs.builders.task.*; +import com.atlassian.bamboo.specs.builders.task.CheckoutItem; import com.atlassian.bamboo.specs.builders.task.InjectVariablesTask; +import com.atlassian.bamboo.specs.builders.task.ScriptTask; +import com.atlassian.bamboo.specs.builders.task.VcsCheckoutTask; +import com.atlassian.bamboo.specs.builders.task.VcsTagTask; import com.atlassian.bamboo.specs.builders.trigger.BitbucketServerTrigger; -import com.atlassian.bamboo.specs.builders.trigger.RepositoryPollingTrigger; import com.atlassian.bamboo.specs.builders.trigger.ScheduledTrigger; import com.atlassian.bamboo.specs.model.task.InjectVariablesScope; import com.atlassian.bamboo.specs.model.task.ScriptTaskProperties.Location; import com.atlassian.bamboo.specs.util.BambooServer; -import static com.atlassian.bamboo.specs.builders.task.TestParserTask.createJUnitParserTask; - /** * Plan configuration for Bamboo. * Learn more on: https://confluence.atlassian.com/display/BAMBOO/Bamboo+Specs @@ -77,11 +77,7 @@ public class PlanSpec { } public Plan createPlanBuild() { - return new Plan( - project(), - SERVICE_NAME, new BambooKey(SERVICE_KEY)) - .description("Build Plan for Persitence Service") - .variables(new Variable("maven_add_param", "")) + return new Plan(project(), SERVICE_NAME, new BambooKey(SERVICE_KEY)).description("Build Plan for Persitence Service").variables(new Variable("maven_add_param", "")) .stages(new Stage("Default Stage") .jobs(new Job("Default Job", new BambooKey("JOB1")) @@ -90,10 +86,7 @@ public class PlanSpec { .description("Clean") .inlineBody("#!/bin/bash\n" + "set -e\n" + - "rm -rf ./*"), - new VcsCheckoutTask() - .description("Checkout Default Repository") - .cleanCheckout(true) + "rm -rf ./*"), new VcsCheckoutTask().description("Checkout Default Repository").cleanCheckout(true) .checkoutItems(new CheckoutItem().defaultRepository()), new ScriptTask() .description("Build") @@ -113,9 +106,7 @@ public class PlanSpec { .description("${bamboo.g.gitTag}") .tagName("${bamboo.g.gitTag}") .defaultRepository()) - .dockerConfiguration( - new DockerConfiguration() - .image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") + .dockerConfiguration(new DockerConfiguration().image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") .dockerRunArguments("--net=host") .volume("/etc/maven/settings.xml", "/usr/share/maven/ref/settings.xml") .volume("/var/run/docker.sock", "/var/run/docker.sock") @@ -144,29 +135,22 @@ public class PlanSpec { .description("Clean") .inlineBody("#!/bin/bash\n" + "set -e\n" + - "rm -rf ./*"), - new VcsCheckoutTask() - .description("Checkout Default Repository") - .cleanCheckout(true) + "rm -rf ./*"), new VcsCheckoutTask().description("Checkout Default Repository").cleanCheckout(true) .checkoutItems(new CheckoutItem().defaultRepository()), new ScriptTask() .description("Sonar") .location(Location.FILE) .fileFromPath("bamboo-specs/src/main/resources/scripts/sonar-java.sh") .argument(SERVICE_NAME)) - .dockerConfiguration( - new DockerConfiguration() - .image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") - .dockerRunArguments("--net=host") - .volume("/etc/maven/settings.xml", "/usr/share/maven/conf/settings.xml") + .dockerConfiguration(new DockerConfiguration().image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") + .dockerRunArguments("--net=host") + .volume("/etc/maven/settings.xml", "/usr/share/maven/conf/settings.xml") .volume("/var/run/docker.sock", "/var/run/docker.sock") ) ) ) .linkedRepositories("RED / " + SERVICE_NAME) - .triggers( - new ScheduledTrigger() - .scheduleOnceDaily(LocalTime.of(23, 00))) + .triggers(new ScheduledTrigger().scheduleOnceDaily(LocalTime.of(23, 00))) .planBranchManagement(new PlanBranchManagement() .createForVcsBranchMatching("release.*") .notificationForCommitters()); diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java index fdc9837f0..35ab36007 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/file/FileModel.java @@ -1,17 +1,18 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.time.OffsetDateTime; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/index/IndexInformation.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/index/IndexInformation.java new file mode 100644 index 000000000..b01ae176c --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/index/IndexInformation.java @@ -0,0 +1,19 @@ +package com.iqser.red.service.persistence.service.v1.api.model.index; + +import java.time.OffsetDateTime; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class IndexInformation { + + private String indexConfigurationHash; + private OffsetDateTime updateDate; + +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java index c5cd9721c..18ff855a2 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierResource.java @@ -1,17 +1,25 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Set; + +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierChange; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierInformation; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - -import java.time.OffsetDateTime; -import java.util.List; -import java.util.Set; @ResponseStatus(value = HttpStatus.OK) public interface DossierResource { @@ -52,6 +60,7 @@ public interface DossierResource { List getAllDossiers(@RequestParam(name = INCLUDE_ARCHIVED_PARAM, defaultValue = "false", required = false) boolean includeArchived, @RequestParam(name = INCLUDE_DELETED_PARAM, defaultValue = "false", required = false) boolean includeDeleted); + @GetMapping(value = REST_PATH + INFO_PATH, produces = MediaType.APPLICATION_JSON_VALUE) DossierInformation getDossierInformation(@RequestBody List filteredDossierIds); diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/IndexInformationResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/IndexInformationResource.java new file mode 100644 index 000000000..5ea4428b6 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/IndexInformationResource.java @@ -0,0 +1,29 @@ +package com.iqser.red.service.persistence.service.v1.api.resources; + +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import com.iqser.red.service.persistence.service.v1.api.model.index.IndexInformation; + +public interface IndexInformationResource { + + String PATH = "/index-information"; + + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = PATH, produces = MediaType.APPLICATION_JSON_VALUE) + IndexInformation getIndexInformation(); + + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @PostMapping(value = PATH, consumes = MediaType.APPLICATION_JSON_VALUE) + void updateIndexInformation(@RequestBody IndexInformation indexInformation); + +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java index 0121be7d1..5b07d70c4 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReanalysisResource.java @@ -67,6 +67,7 @@ public interface ReanalysisResource { @PostMapping(value = TEXT_HIGHLIGHT_CONVERSION_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) TextHighlightResponse processTextHighlights(@RequestBody TextHighlightRequest textHighlightRequest); + @PostMapping(value = CONVERT_TEXT_HIGHLIGHTS_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) void convertTextHighlights(@RequestBody TextHighlightConversionRequest textHighlightRequest); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java index c7afaa23f..00a561fe1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/PersistenceServiceProcessorConfiguration.java @@ -1,14 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor; -import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; -import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.audit.AuditEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.migration.MigrationEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.notification.NotificationEntity; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ColorsRepository; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.support.PageJacksonModule; @@ -18,9 +9,20 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.audit.AuditEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.index.IndexInformationEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.migration.MigrationEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.notification.NotificationEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ColorsRepository; + @Configuration @ComponentScan -@EntityScan(basePackageClasses = {CommentEntity.class, AuditEntity.class, NotificationEntity.class, ColorsEntity.class, DossierEntity.class, DownloadStatusEntity.class, MigrationEntity.class}) +@EntityScan(basePackageClasses = {CommentEntity.class, AuditEntity.class, NotificationEntity.class, ColorsEntity.class, DossierEntity.class, DownloadStatusEntity.class, MigrationEntity.class, IndexInformationEntity.class}) @EnableJpaRepositories(basePackageClasses = ColorsRepository.class) @EnableFeignClients(basePackageClasses = {PDFTronRedactionClient.class}) public class PersistenceServiceProcessorConfiguration { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java index 4c4738e95..3bd1ee7be 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/FileEntity.java @@ -1,22 +1,35 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.dossier; -import com.iqser.red.service.persistence.management.v1.processor.utils.JSONIntegerSetConverter; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; - -import javax.persistence.*; import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Convert; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; + +import com.iqser.red.service.persistence.management.v1.processor.utils.JSONIntegerSetConverter; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/index/IndexInformationEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/index/IndexInformationEntity.java new file mode 100644 index 000000000..3bf4cf370 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/index/IndexInformationEntity.java @@ -0,0 +1,37 @@ +package com.iqser.red.service.persistence.management.v1.processor.entity.index; + +import java.time.OffsetDateTime; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +import com.iqser.red.service.persistence.service.v1.api.utils.SuppressFBWarnings; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "index_information") +@SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE") +public class IndexInformationEntity { + + public final static String ID = "CONFIG_ID"; + + @Id + private final String id = IndexInformationEntity.ID; + + @Column + private String indexConfigurationHash; + + @Column + private OffsetDateTime updateDate; + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 9164ea992..112d578a1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -1,5 +1,17 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.transaction.Transactional; + +import org.springframework.stereotype.Service; + import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; @@ -9,17 +21,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import javax.transaction.Transactional; -import java.time.OffsetDateTime; -import java.time.temporal.ChronoUnit; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor @@ -355,18 +358,23 @@ public class FileStatusPersistenceService { return fileRepository.countSoftDeletedFiles(dossierId); } + public List getAllRelevantStatusesForReanalysisScheduler() { + return fileRepository.getAllRelevantStatusesForReanalysisScheduler(); } @Transactional public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate) { + fileRepository.updateFileModificationDate(fileId, fileManipulationDate); } + @Transactional - public void updateHasHighlights(String fileId, boolean hasHighlights){ + public void updateHasHighlights(String fileId, boolean hasHighlights) { + fileRepository.updateHasHighlights(fileId, hasHighlights); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/IndexInformationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/IndexInformationPersistenceService.java new file mode 100644 index 000000000..8a338b953 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/IndexInformationPersistenceService.java @@ -0,0 +1,32 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence; + +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import com.iqser.red.service.persistence.management.v1.processor.entity.index.IndexInformationEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.IndexInformationRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class IndexInformationPersistenceService { + + private final IndexInformationRepository indexInformationRepository; + + + public IndexInformationEntity getIndexInformation() { + + Optional indexInformation = indexInformationRepository.findById(IndexInformationEntity.ID); + return indexInformation.orElseThrow(() -> new NotFoundException("Index information does not exist")); + } + + + public void updateIndexInformation(IndexInformationEntity indexInformation) { + + indexInformationRepository.save(indexInformation); + } + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java index aeb952c35..345545a86 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java @@ -1,15 +1,15 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; +import java.time.OffsetDateTime; +import java.util.List; -import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; -import java.time.OffsetDateTime; -import java.util.List; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; public interface FileRepository extends JpaRepository { @@ -67,29 +67,31 @@ public interface FileRepository extends JpaRepository { @Modifying(clearAutomatically = true) @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated," + "f.lastIndexed = :lastIndexed where f.id = :fileId") - void setUpdateStatusIndexingSuccessful(String fileId, ProcessingStatus processingStatus, OffsetDateTime lastUpdated, - OffsetDateTime lastIndexed); + void setUpdateStatusIndexingSuccessful(String fileId, ProcessingStatus processingStatus, OffsetDateTime lastUpdated, OffsetDateTime lastIndexed); + @Modifying @Query("update FileEntity f set f.lastUpdated = :lastUpdated, f.lastOCRTime = :lastOCRTime where f.id = :fileId") void updateLastOCRTime(String fileId, OffsetDateTime lastUpdated, OffsetDateTime lastOCRTime); + @Modifying @Query("update FileEntity f set f.fileManipulationDate = :fileManipulationDate where f.id = :fileId") void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate); + @Modifying @Query("update FileEntity f set f.hasHighlights = :hasHighlights where f.id = :fileId") void updateHasHighlights(String fileId, boolean hasHighlights); + @Modifying @Query("update FileEntity f set f.lastUpdated = :lastUpdated, f.hasAnnotationComments = :hasAnnotationComments where f.id = :fileId") void updateHasComments(String fileId, OffsetDateTime lastUpdated, boolean hasAnnotationComments); @Modifying - @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, " + - "f.deleted = :softDeletedTime where f.id = :fileId") + @Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, " + "f.deleted = :softDeletedTime where f.id = :fileId") int setSoftDelete(String fileId, ProcessingStatus processingStatus, OffsetDateTime lastUpdated, OffsetDateTime softDeletedTime); @@ -117,17 +119,11 @@ public interface FileRepository extends JpaRepository { @Query("update FileEntity f set f.excludedFromAutomaticAnalysis = :excludedFromAutomaticAnalysis, f.lastUpdated = :lastUpdated where f.id = :fileId") int toggleAutomaticAnalysis(String fileId, boolean excludedFromAutomaticAnalysis, OffsetDateTime lastUpdated); + @Modifying(clearAutomatically = true) - @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + - "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, f.fileManipulationDate = :lastUploaded, " + - "f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " + - "f.assignee = null, f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, f.redactionModificationDate = null," + - "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + - "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " + - "f.deleted = null, f.hardDeletedTime = null, f.hasHighlights = :hasHighlights " + - "where f.id = :fileId") - int overwriteFile(String fileId, String filename, String uploader, ProcessingStatus processingStatus, - WorkflowStatus workflowStatus, OffsetDateTime lastUploaded, OffsetDateTime lastUpdated, boolean hasHighlights); + @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, f.fileManipulationDate = :lastUploaded, " + "f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " + "f.assignee = null, f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, f.redactionModificationDate = null," + "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " + "f.deleted = null, f.hardDeletedTime = null, f.hasHighlights = :hasHighlights " + "where f.id = :fileId") + int overwriteFile(String fileId, String filename, String uploader, ProcessingStatus processingStatus, WorkflowStatus workflowStatus, OffsetDateTime lastUploaded, + OffsetDateTime lastUpdated, boolean hasHighlights); @Query("select count(f) from FileEntity f where f.dossierId = :dossierId and f.deleted is not null and f.hardDeletedTime is null") int countSoftDeletedFiles(String dossierId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/IndexInformationRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/IndexInformationRepository.java new file mode 100644 index 000000000..16553fc8e --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/IndexInformationRepository.java @@ -0,0 +1,9 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.iqser.red.service.persistence.management.v1.processor.entity.index.IndexInformationEntity; + +public interface IndexInformationRepository extends JpaRepository { + +} diff --git a/persistence-service-v1/persistence-service-server-v1/pom.xml b/persistence-service-v1/persistence-service-server-v1/pom.xml index 71b942fc0..87a340fec 100644 --- a/persistence-service-v1/persistence-service-server-v1/pom.xml +++ b/persistence-service-v1/persistence-service-server-v1/pom.xml @@ -27,6 +27,10 @@ com.iqser.red.service pdftron-redaction-service-api-v1 + + com.iqser.red.service + persistence-service-api-v1 + diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/IndexInformationController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/IndexInformationController.java new file mode 100644 index 000000000..94202fd58 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/IndexInformationController.java @@ -0,0 +1,35 @@ +package com.iqser.red.service.peristence.v1.server.controller; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import com.iqser.red.service.persistence.management.v1.processor.entity.index.IndexInformationEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.IndexInformationPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.model.index.IndexInformation; +import com.iqser.red.service.persistence.service.v1.api.resources.IndexInformationResource; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +public class IndexInformationController implements IndexInformationResource { + + private final IndexInformationPersistenceService indexInformationPersistenceService; + + + @Override + public IndexInformation getIndexInformation() { + + return convert(indexInformationPersistenceService.getIndexInformation(), IndexInformation.class); + } + + + @Override + public void updateIndexInformation(@RequestBody IndexInformation indexInformation) { + + indexInformationPersistenceService.updateIndexInformation(convert(indexInformation, IndexInformationEntity.class)); + } + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java index d1576dbaa..b305f50d5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java @@ -24,7 +24,6 @@ import com.iqser.red.service.pdftron.redaction.v1.api.model.TextHighlightRequest import com.iqser.red.service.pdftron.redaction.v1.api.model.TextHighlightResponse; import com.iqser.red.service.peristence.v1.server.service.FileStatusService; import com.iqser.red.service.peristence.v1.server.service.IndexingService; -import com.iqser.red.service.peristence.v1.server.service.ReanalysisRequiredStatusService; import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; @@ -49,8 +48,7 @@ public class ReanalysisController implements ReanalysisResource { @Override - public void reanalyzeDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId, - @RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force) { + public void reanalyzeDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force) { var relevantFiles = getAllFilesForDossier(dossierId, true); reanalyseFiles(dossierId, force, relevantFiles); @@ -86,11 +84,23 @@ public class ReanalysisController implements ReanalysisResource { } - public void reindex(@RequestParam(value = DOSSIER_ID_PARAM, required = false) String dossierId, - @RequestParam(value = "dropIndex", required = false, defaultValue = FALSE) boolean dropIndex, - @RequestBody Set fileIds) { + public void ocrFile(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID_PARAM) String fileId, + @RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force) { - indexingService.reindex(dossierId, fileIds, dropIndex); + dossierPersistenceService.getAndValidateDossier(dossierId); + + if (force) { + fileStatusService.setStatusOcrProcessing(dossierId, fileId); + } else { + FileModel dossierFile = fileStatusService.getStatus(fileId); + if (dossierFile.getProcessingStatus().equals(ProcessingStatus.DELETED) || dossierFile.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) { + throw new ConflictException("Cannot analyse a deleted/approved file"); + } + if (dossierFile.getLastOCRTime() != null) { + throw new ConflictException("File already has been OCR processed"); + } + ocrFiles(dossierId, Sets.newHashSet(fileId)); + } } @@ -113,15 +123,19 @@ public class ReanalysisController implements ReanalysisResource { } + public void reindex(@RequestParam(value = DOSSIER_ID_PARAM, required = false) String dossierId, + @RequestParam(value = "dropIndex", required = false, defaultValue = FALSE) boolean dropIndex, @RequestBody Set fileIds) { + + indexingService.reindex(dossierId, fileIds, dropIndex); + } + + public TextHighlightResponse processTextHighlights(@RequestBody TextHighlightRequest textHighlightRequest) { var textHighlightResponse = pDFTronRedactionClient.processTextHighlights(textHighlightRequest); - if (textHighlightRequest.getOperation() - .equals(TextHighlightOperation.REMOVE) || textHighlightRequest.getOperation() - .equals(TextHighlightOperation.CONVERT)) { - fileStatusService.updateFileModificationDate(textHighlightRequest.getFileId(), OffsetDateTime.now() - .truncatedTo(ChronoUnit.MILLIS)); + if (textHighlightRequest.getOperation().equals(TextHighlightOperation.REMOVE) || textHighlightRequest.getOperation().equals(TextHighlightOperation.CONVERT)) { + fileStatusService.updateFileModificationDate(textHighlightRequest.getFileId(), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); } if (textHighlightRequest.getOperation().equals(TextHighlightOperation.CONVERT)) { fileStatusService.setStatusFullReprocess(textHighlightRequest.getDossierId(), textHighlightRequest.getFileId(), true); @@ -135,8 +149,7 @@ public class ReanalysisController implements ReanalysisResource { boolean hasTextHighlights = pDFTronRedactionClient.convertTextHighlights(textHighlightRequest); fileStatusService.updateHasHighlights(textHighlightRequest.getFileId(), hasTextHighlights); - fileStatusService.updateFileModificationDate(textHighlightRequest.getFileId(), OffsetDateTime.now() - .truncatedTo(ChronoUnit.MILLIS)); + fileStatusService.updateFileModificationDate(textHighlightRequest.getFileId(), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); if (textHighlightRequest.getOperation().equals(TextHighlightConversionOperation.CONVERT)) { fileStatusService.setStatusFullReprocess(textHighlightRequest.getDossierId(), textHighlightRequest.getFileId(), true); @@ -144,27 +157,6 @@ public class ReanalysisController implements ReanalysisResource { } - public void ocrFile(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID_PARAM) String fileId, - @RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force) { - - dossierPersistenceService.getAndValidateDossier(dossierId); - - if (force) { - fileStatusService.setStatusOcrProcessing(dossierId, fileId); - } else { - FileModel dossierFile = fileStatusService.getStatus(fileId); - if (dossierFile.getProcessingStatus().equals(ProcessingStatus.DELETED) || dossierFile.getWorkflowStatus() - .equals(WorkflowStatus.APPROVED)) { - throw new ConflictException("Cannot analyse a deleted/approved file"); - } - if (dossierFile.getLastOCRTime() != null) { - throw new ConflictException("File already has been OCR processed"); - } - ocrFiles(dossierId, Sets.newHashSet(fileId)); - } - } - - private List getAllFilesForDossier(String dossierId, boolean filterOnlyValidFiles) { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java index dd03289e8..2d9200d6e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java @@ -4,15 +4,12 @@ import java.nio.charset.StandardCharsets; import java.time.OffsetDateTime; import java.util.Arrays; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; - import org.springframework.stereotype.Service; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; import com.iqser.red.service.pdftron.redaction.v1.api.model.DocumentRequest; import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; -import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; 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; @@ -27,6 +24,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.search.v1.model.IndexMessageType; @@ -82,8 +80,6 @@ public class FileService { try { hasHighlights = pdfTronRedactionClient.saveOptimizedAndAnnotations(new DocumentRequest(request.getDossierId(), fileId, request.getData())); - - } catch (FeignException e) { log.warn("Failed to optimize file: {}", request.getFilename(), e); throw new BadRequestException("Failed to optimize document"); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java index 879d3cc40..b3b1f0289 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileStatusService.java @@ -351,12 +351,14 @@ public class FileStatusService { } - public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate){ + public void updateFileModificationDate(String fileId, OffsetDateTime fileManipulationDate) { + fileStatusPersistenceService.updateFileModificationDate(fileId, fileManipulationDate); } - public void updateHasHighlights(String fileId, boolean hasHighlights){ + public void updateHasHighlights(String fileId, boolean hasHighlights) { + fileStatusPersistenceService.updateHasHighlights(fileId, hasHighlights); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/20-add-index-information-table.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/20-add-index-information-table.yaml new file mode 100644 index 000000000..95f75361e --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/20-add-index-information-table.yaml @@ -0,0 +1,21 @@ +databaseChangeLog: + - changeSet: + id: add-index-information + author: philipp + changes: + - createTable: + columns: + - column: + constraints: + nullable: false + primaryKey: true + primaryKeyName: index_information_pkey + name: id + type: VARCHAR(255) + - column: + name: index_configuration_hash + type: VARCHAR(255) + - column: + name: update_date + type: TIMESTAMP WITHOUT TIME ZONE + tableName: index_information \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml index d2d98bc53..61ed3b9f5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml @@ -44,4 +44,6 @@ databaseChangeLog: - include: file: db/changelog/18-add-migration-table.yaml - include: - file: db/changelog/19-added-has-highlights-to-file.changelog.yaml \ No newline at end of file + file: db/changelog/19-added-has-highlights-to-file.changelog.yaml + - include: + file: db/changelog/20-add-index-information-table.yaml \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/IndexInformationClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/IndexInformationClient.java new file mode 100644 index 000000000..5b350e5f2 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/IndexInformationClient.java @@ -0,0 +1,10 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import org.springframework.cloud.openfeign.FeignClient; + +import com.iqser.red.service.persistence.service.v1.api.resources.IndexInformationResource; + +@FeignClient(name = "IndexInformationClient", url = "http://localhost:${server.port}") +public interface IndexInformationClient extends IndexInformationResource { + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/IndexInformationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/IndexInformationTest.java new file mode 100644 index 000000000..5c190d25c --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/IndexInformationTest.java @@ -0,0 +1,62 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.iqser.red.service.peristence.v1.server.integration.client.IndexInformationClient; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.IndexInformationRepository; +import com.iqser.red.service.persistence.service.v1.api.model.index.IndexInformation; + +import feign.FeignException; + +public class IndexInformationTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private IndexInformationClient indexInformationClient; + + @Autowired + private IndexInformationRepository indexInformationRepository; + + + @Test + public void test() { + + // No indexInformation exist + try { + IndexInformation indexInformation = indexInformationClient.getIndexInformation(); + } catch (FeignException e) { + assertThat(e.status()).isEqualTo(404); + } + + // Save indexInformation the first time + String hash = "This is the hash from the search-service"; + OffsetDateTime timeStamp = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); + + IndexInformation indexInformation = IndexInformation.builder().indexConfigurationHash(hash).updateDate(timeStamp).build(); + indexInformationClient.updateIndexInformation(indexInformation); + + IndexInformation indexInformationFromDb = indexInformationClient.getIndexInformation(); + assertThat(indexInformationFromDb).isNotNull(); + assertThat(indexInformationFromDb.getIndexConfigurationHash()).isEqualTo(hash); + assertThat(indexInformationFromDb.getUpdateDate()).isEqualTo(timeStamp); + + // Update indexInformation + String newHash = "This is 2. the hash from the search-service"; + OffsetDateTime newTimeStamp = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); + + IndexInformation newIndexInformation = IndexInformation.builder().indexConfigurationHash(newHash).updateDate(newTimeStamp).build(); + indexInformationClient.updateIndexInformation(newIndexInformation); + + indexInformationFromDb = indexInformationClient.getIndexInformation(); + assertThat(indexInformationFromDb).isNotNull(); + assertThat(indexInformationFromDb.getIndexConfigurationHash()).isEqualTo(newHash); + assertThat(indexInformationFromDb.getUpdateDate()).isEqualTo(newTimeStamp); + } + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index bc071558b..f10d53f52 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -1,24 +1,13 @@ package com.iqser.red.service.peristence.v1.server.integration.utils; -import com.iqser.red.service.pdftron.redaction.v1.api.model.*; -import com.iqser.red.service.peristence.v1.server.Application; -import com.iqser.red.service.peristence.v1.server.client.RedactionClient; -import com.iqser.red.service.peristence.v1.server.client.SearchClient; -import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; -import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; -import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils; -import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.*; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; -import com.iqser.red.service.redaction.v1.model.AnnotateResponse; -import com.iqser.red.service.redaction.v1.model.RedactionLog; -import com.iqser.red.service.redaction.v1.model.RedactionResult; -import com.iqser.red.storage.commons.StorageAutoConfiguration; -import com.iqser.red.storage.commons.service.StorageService; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; + import org.assertj.core.util.Lists; import org.junit.After; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.springframework.amqp.core.AmqpAdmin; @@ -32,17 +21,60 @@ import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; - -import java.util.List; -import java.util.TimeZone; +import com.iqser.red.service.pdftron.redaction.v1.api.model.DocumentRequest; +import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronFlattenRequest; +import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronFlattenResponse; +import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronRedactionRequest; +import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronRedactionResult; +import com.iqser.red.service.peristence.v1.server.Application; +import com.iqser.red.service.peristence.v1.server.client.RedactionClient; +import com.iqser.red.service.peristence.v1.server.client.SearchClient; +import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; +import com.iqser.red.service.peristence.v1.server.utils.MetricsPrinterService; +import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils; +import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeConfigRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierStatusRepository; +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.DownloadStatusRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.EntryRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributeConfigRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesGeneralConfigurationRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ForceRedactionRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ImageRecategorizationRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.IndexInformationRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisChangeRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisMappingRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ManualRedactionRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationPreferencesRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RemoveRedactionRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RuleSetRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.SMTPRepository; +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.ViewedPagesRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; +import com.iqser.red.service.redaction.v1.model.AnnotateResponse; +import com.iqser.red.service.redaction.v1.model.RedactionLog; +import com.iqser.red.service.redaction.v1.model.RedactionResult; +import com.iqser.red.storage.commons.StorageAutoConfiguration; +import com.iqser.red.storage.commons.service.StorageService; @RunWith(SpringRunner.class) @EnableFeignClients(basePackageClasses = FileClient.class) @@ -120,6 +152,9 @@ public abstract class AbstractPersistenceServerServiceTest { protected MetricsPrinterService metricsPrinterService; @Autowired protected EntryRepository entryRepository; + @Autowired + protected IndexInformationRepository indexInformationRepository; + @Before public void setupOptimize() { @@ -194,6 +229,7 @@ public abstract class AbstractPersistenceServerServiceTest { dossierStatusRepository.deleteAll(); dossierTemplateRepository.deleteAll(); notificationPreferencesRepository.deleteAll(); + indexInformationRepository.deleteAll(); } static class Initializer implements ApplicationContextInitializer {