diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentLogService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentLogService.java index 7a4a69efa..813b2633a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentLogService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentLogService.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService; @@ -118,27 +119,44 @@ public class ComponentLogService { } + @Transactional public void addOverride(String dossierId, String fileId, ComponentLogEntry componentOverride) { var optionalComponentLogEntry = componentLogMongoService.findComponentLogEntryById(dossierId, fileId, componentOverride.getName()); + ComponentLogEntry componentToUpdate; if (optionalComponentLogEntry.isPresent()) { - ComponentLogEntry componentToUpdate = optionalComponentLogEntry.get(); - componentToUpdate.setOverridden(true); - System.out.println("AAAA1: " + componentToUpdate); - componentToUpdate.getComponentValues().addAll(componentOverride.getComponentValues()); - saveOverride(dossierId, fileId, componentToUpdate); - auditOverride(dossierId, fileId, componentToUpdate); + componentToUpdate = optionalComponentLogEntry.get(); + updateComponentLogEntry(dossierId, fileId, componentOverride, componentToUpdate); } else { - componentOverride.setOverridden(true); - System.out.println("AAAA2: " + componentOverride); - insertOverride(dossierId, fileId, componentOverride); - auditOverride(dossierId, fileId, componentOverride); + optionalComponentLogEntry = fileManagementStorageService.getComponentLog(dossierId, fileId).getComponentLogEntries() + .stream() + .filter(componentLogEntry -> componentOverride.getName().equals(componentLogEntry.getName())) + .findFirst(); + if (optionalComponentLogEntry.isPresent()) { + componentToUpdate = optionalComponentLogEntry.get(); + updateComponentLogEntry(dossierId, fileId, componentOverride, componentToUpdate); + } else { + componentOverride.setOverridden(true); + System.out.println("AAAA2: " + componentOverride); + insertOverride(dossierId, fileId, componentOverride); + auditOverride(dossierId, fileId, componentOverride); + } } } + private void updateComponentLogEntry(String dossierId, String fileId, ComponentLogEntry componentOverride, ComponentLogEntry componentToUpdate) { + + componentToUpdate.setOverridden(true); + System.out.println("AAAA: " + componentToUpdate); + componentToUpdate.setComponentValues(componentOverride.getComponentValues()); + saveOverride(dossierId, fileId, componentToUpdate); + auditOverride(dossierId, fileId, componentToUpdate); + } + + private void saveOverride(String dossierId, String fileId, ComponentLogEntry componentToUpdate) { componentLogMongoService.saveComponentLogEntries(dossierId, fileId, List.of(componentToUpdate)); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java index f71352a18..4319e8287 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentOverrideTest.java @@ -2,6 +2,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.util.List; @@ -62,7 +63,6 @@ public class ComponentOverrideTest extends AbstractPersistenceServerServiceTest .page(1) .build())) .build())) - .overridden(true) .build(); var componentLogJson = new ClassPathResource("files/componentlog/exampleComponentLog.json"); @@ -78,7 +78,35 @@ public class ComponentOverrideTest extends AbstractPersistenceServerServiceTest assertEquals(file.getId(), overrides.getFileId()); assertFalse(overrides.getComponentOverrideModels().isEmpty()); + assertTrue(overrides.getComponentOverrideModels().get(0).isOverridden()); + // override same entry a second time + Component componentOverrideModel2 = Component.builder() + .name("Study_Title") + .componentValues(List.of(ComponentValue.builder() + .value("BBBB Strange Chemical Name And the rest of a title – With a dash and some more text") + .originalValue("Strange Chemical Name And the rest of a title – With a dash and some more text") + .valueDescription("First found value of type title or else ''") + .componentRuleId("StudyTitle.0.0") + .entityReferences(List.of(EntityReference.builder() + .id("cf7f0d0c4c07918ce7d67b204f5fdb7d") + .type("title") + .entityRuleId("DOC.6.1") + .page(1) + .build())) + .build())) + .build(); + componentClient.addOverride(dossierTemplate.getId(), dossier.getId(), file.getId(), componentOverrideModel2); + +// when(fileManagementStorageService.getComponentLog(any(), any())).thenReturn(); + overrides = componentClient.getOverrides(dossierTemplate.getId(), dossier.getId(), file.getId()); + + assertEquals(dossierTemplate.getId(), overrides.getDossierTemplateId()); + assertEquals(dossier.getId(), overrides.getDossierId()); + assertEquals(file.getId(), overrides.getFileId()); + + assertFalse(overrides.getComponentOverrideModels().isEmpty()); + assertTrue(overrides.getComponentOverrideModels().get(0).isOverridden()); } } diff --git a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/document/ComponentDocument.java b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/document/ComponentDocument.java index e2ef280f3..f4b0b80de 100644 --- a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/document/ComponentDocument.java +++ b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/document/ComponentDocument.java @@ -20,7 +20,7 @@ import lombok.experimental.FieldDefaults; @AllArgsConstructor @EqualsAndHashCode(onlyExplicitlyIncluded = true) @FieldDefaults(level = AccessLevel.PRIVATE) -@Document(collection = "components") +@Document(collection = "component-log-entries") public class ComponentDocument { @Id @@ -33,7 +33,8 @@ public class ComponentDocument { List overrideValues = new ArrayList<>(); - // these parameters will be needed later - // List values = new ArrayList<>(); - // boolean overridden; + List values = new ArrayList<>(); + + boolean overridden; + } diff --git a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/repository/ComponentDocumentRepository.java b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/repository/ComponentDocumentRepository.java index 7b6b3324f..22635ea78 100644 --- a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/repository/ComponentDocumentRepository.java +++ b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/repository/ComponentDocumentRepository.java @@ -15,7 +15,6 @@ public interface ComponentDocumentRepository extends MongoRepository findComponentDocumentByName(String componentLogId, String componentName); diff --git a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/service/ComponentLogMongoService.java b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/service/ComponentLogMongoService.java index a3448e151..5084049a3 100644 --- a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/service/ComponentLogMongoService.java +++ b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/service/ComponentLogMongoService.java @@ -105,7 +105,6 @@ public class ComponentLogMongoService { .map(componentLogEntry -> mapper.toComponentDocument(componentLogId, componentLogEntry)) .toList(); - System.out.println("BBBB: " + componentDocuments); componentDocumentRepository.insert(componentDocuments); } @@ -126,16 +125,11 @@ public class ComponentLogMongoService { String componentLogId = mapper.getComponentLogId(dossierId, fileId); - ComponentLogDocument componentLogDocument = getComponentLogDocument(componentLogId); - List componentDocuments = componentLogEntries.stream() .map(componentLogEntry -> mapper.toComponentDocument(componentLogId, componentLogEntry)) .toList(); - componentLogDocument.getComponents().addAll(componentDocuments); - componentDocumentRepository.saveAll(componentDocuments); - componentLogDocumentRepository.save(componentLogDocument); } @@ -149,7 +143,7 @@ public class ComponentLogMongoService { } - public void deleteComponentLogEntries(String dossierId, String fileId, List componentLogEntries) { + public void deleteComponentLogEntriesFromComponentLog(String dossierId, String fileId, List componentLogEntries) { String componentLogId = mapper.getComponentLogId(dossierId, fileId); @@ -175,7 +169,7 @@ public class ComponentLogMongoService { public Optional findComponentLogEntryById(String dossierId, String fileId, String componentName) { - return componentDocumentRepository.findComponentDocumentByName(mapper.getComponentLogId(dossierId, fileId), componentName) + return componentDocumentRepository.findById(mapper.getComponentId(mapper.getComponentLogId(dossierId, fileId), componentName)) .map(mapper::fromComponentDocument); } @@ -197,11 +191,6 @@ public class ComponentLogMongoService { }); return overrides; - -// return componentLogDocumentRepository.findOverrides(dossierId, fileId) -// .stream() -// .map(mapper::fromComponentDocument) -// .toList(); }