From cb578dbac3e1fec2e0fe93bbe77ec6ab7968f438 Mon Sep 17 00:00:00 2001 From: "farid.ait-karra" Date: Mon, 22 Dec 2025 13:27:22 +0100 Subject: [PATCH 1/3] feat: add endpoint raw-responses --- .../rest/responses/RawResponseController.java | 20 ++++++- .../model/surveyunit/rawdata/RawResponse.java | 2 + .../domain/ports/api/RawResponseApiPort.java | 5 +- .../ports/spi/RawResponsePersistencePort.java | 6 +- .../service/rawdata/RawResponseService.java | 15 +++-- .../adapter/RawResponseMongoAdapter.java | 11 ++++ .../document/rawdata/RawResponseDocument.java | 4 +- .../repository/RawResponseRepository.java | 5 ++ .../functional_tests/RawDataDefinitions.java | 22 ++++---- .../responses/RawResponseControllerTest.java | 55 +++++++++++++++---- .../stubs/RawResponseDataPersistanceStub.java | 51 +++++++++++++++++ 11 files changed, 163 insertions(+), 33 deletions(-) create mode 100644 src/test/java/fr/insee/genesis/stubs/RawResponseDataPersistanceStub.java diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java index f2ff8da6..fc8cd35d 100644 --- a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java +++ b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java @@ -12,6 +12,7 @@ import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult; import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel; +import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponse; import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort; import fr.insee.genesis.domain.ports.api.RawResponseApiPort; import fr.insee.genesis.exceptions.GenesisError; @@ -270,7 +271,7 @@ public ResponseEntity>> getProcessedDataIdsSinceHours( @Operation(summary = "Get lunatic JSON data from one campaign in Genesis Database, filtered by start and end dates") @GetMapping(path = "/responses/raw/lunatic-json/{campaignId}") @PreAuthorize("hasRole('USER_BATCH_GENERIC')") - public ResponseEntity> getRawResponsesFromJsonBody( + public ResponseEntity> getLunaticJsonRawDataModelFromJsonBody( @PathVariable String campaignId, @RequestParam(value = "startDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Instant startDate, @RequestParam(value = "endDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Instant endDate, @@ -284,5 +285,20 @@ public ResponseEntity> getRawResponsesFromJs return ResponseEntity.status(HttpStatus.OK).body(new PagedModel<>(rawResponses)); } - + @Operation(summary = "Get rawResponse JSON data from one campaign in Genesis Database, filtered by start and end dates") + @GetMapping(path = "/raw-responses/{campaignId}") + @PreAuthorize("hasRole('USER_BATCH_GENERIC')") + public ResponseEntity> getRawResponsesFromJsonBody( + @PathVariable String campaignId, + @RequestParam(value = "startDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Instant startDate, + @RequestParam(value = "endDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Instant endDate, + @RequestParam(value = "page", defaultValue = "0") int page, + @RequestParam(value = "size", defaultValue = "1000") int size + ) { + log.info("Try to read raw JSONs for campaign {}, with startDate={} and endDate={} - page={} - size={}", campaignId, startDate, endDate,page,size); + Pageable pageable = PageRequest.of(page, size); + Page rawResponses = rawResponseApiPort.findRawResponseDataByCampaignIdAndDate(campaignId, startDate, endDate, pageable); + log.info("rawResponses={}", rawResponses.getContent().size()); + return ResponseEntity.status(HttpStatus.OK).body(new PagedModel<>(rawResponses)); + } } diff --git a/src/main/java/fr/insee/genesis/domain/model/surveyunit/rawdata/RawResponse.java b/src/main/java/fr/insee/genesis/domain/model/surveyunit/rawdata/RawResponse.java index 7f50b76c..bb60708b 100644 --- a/src/main/java/fr/insee/genesis/domain/model/surveyunit/rawdata/RawResponse.java +++ b/src/main/java/fr/insee/genesis/domain/model/surveyunit/rawdata/RawResponse.java @@ -1,11 +1,13 @@ package fr.insee.genesis.domain.model.surveyunit.rawdata; import fr.insee.genesis.domain.model.surveyunit.Mode; +import lombok.Builder; import org.bson.types.ObjectId; import java.time.LocalDateTime; import java.util.Map; +@Builder public record RawResponse( ObjectId id, String interrogationId, diff --git a/src/main/java/fr/insee/genesis/domain/ports/api/RawResponseApiPort.java b/src/main/java/fr/insee/genesis/domain/ports/api/RawResponseApiPort.java index d17a1141..29fd41aa 100644 --- a/src/main/java/fr/insee/genesis/domain/ports/api/RawResponseApiPort.java +++ b/src/main/java/fr/insee/genesis/domain/ports/api/RawResponseApiPort.java @@ -7,7 +7,10 @@ import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponse; import fr.insee.genesis.exceptions.GenesisError; import fr.insee.genesis.exceptions.GenesisException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import java.time.Instant; import java.util.List; public interface RawResponseApiPort { @@ -18,5 +21,5 @@ public interface RawResponseApiPort { List convertRawResponse(List rawResponses, VariablesMap variablesMap); List getUnprocessedCollectionInstrumentIds(); void updateProcessDates(List surveyUnitModels); - + Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable); } diff --git a/src/main/java/fr/insee/genesis/domain/ports/spi/RawResponsePersistencePort.java b/src/main/java/fr/insee/genesis/domain/ports/spi/RawResponsePersistencePort.java index 640bd9b3..b78b8d79 100644 --- a/src/main/java/fr/insee/genesis/domain/ports/spi/RawResponsePersistencePort.java +++ b/src/main/java/fr/insee/genesis/domain/ports/spi/RawResponsePersistencePort.java @@ -2,7 +2,10 @@ import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponse; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import java.time.Instant; import java.util.List; import java.util.Set; @@ -12,4 +15,5 @@ public interface RawResponsePersistencePort { void updateProcessDates(String collectionInstrumentId, Set interrogationIds); List getUnprocessedCollectionIds(); Set findUnprocessedInterrogationIdsByCollectionInstrumentId(String collectionInstrumentId); - } + Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable); +} diff --git a/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java b/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java index 6f343237..82697e63 100644 --- a/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java +++ b/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java @@ -25,17 +25,15 @@ import fr.insee.genesis.infrastructure.utils.FileUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.io.IOException; +import java.time.Instant; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; @Service @@ -444,4 +442,9 @@ private static void convertToExternalVar(SurveyUnitModel dstSurveyUnitModel, Var } } } + + @Override + public Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + return rawResponsePersistencePort.findByCampaignIdAndDate(campaignId,startDate, endDate,pageable); + } } diff --git a/src/main/java/fr/insee/genesis/infrastructure/adapter/RawResponseMongoAdapter.java b/src/main/java/fr/insee/genesis/infrastructure/adapter/RawResponseMongoAdapter.java index 77f2d29d..10fd629c 100644 --- a/src/main/java/fr/insee/genesis/infrastructure/adapter/RawResponseMongoAdapter.java +++ b/src/main/java/fr/insee/genesis/infrastructure/adapter/RawResponseMongoAdapter.java @@ -9,12 +9,16 @@ import fr.insee.genesis.infrastructure.repository.RawResponseRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Service; +import java.time.Instant; import java.time.LocalDateTime; import java.util.HashSet; import java.util.List; @@ -58,4 +62,11 @@ public Set findUnprocessedInterrogationIdsByCollectionInstrumentId(Strin // We remove duplicate ids return new HashSet<>(repository.findInterrogationIdByCollectionInstrumentIdAndProcessDateIsNull(collectionInstrumentId)); } + + @Override + public Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + Page rawDataDocs = repository.findByCampaignIdAndDate(campaignId, startDate, endDate, pageable); + List modelList = RawResponseDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs.getContent()); + return new PageImpl<>(modelList, rawDataDocs.getPageable(), rawDataDocs.getTotalElements()); + } } diff --git a/src/main/java/fr/insee/genesis/infrastructure/document/rawdata/RawResponseDocument.java b/src/main/java/fr/insee/genesis/infrastructure/document/rawdata/RawResponseDocument.java index e62e5a4c..54cce542 100644 --- a/src/main/java/fr/insee/genesis/infrastructure/document/rawdata/RawResponseDocument.java +++ b/src/main/java/fr/insee/genesis/infrastructure/document/rawdata/RawResponseDocument.java @@ -21,5 +21,7 @@ public record RawResponseDocument ( Map payload, LocalDateTime recordDate, @Indexed(direction = IndexDirection.DESCENDING) - LocalDateTime processDate + LocalDateTime processDate, + @Indexed + String campaignId ){} diff --git a/src/main/java/fr/insee/genesis/infrastructure/repository/RawResponseRepository.java b/src/main/java/fr/insee/genesis/infrastructure/repository/RawResponseRepository.java index e09e9fd7..72cbcf6d 100644 --- a/src/main/java/fr/insee/genesis/infrastructure/repository/RawResponseRepository.java +++ b/src/main/java/fr/insee/genesis/infrastructure/repository/RawResponseRepository.java @@ -1,11 +1,14 @@ package fr.insee.genesis.infrastructure.repository; import fr.insee.genesis.infrastructure.document.rawdata.RawResponseDocument; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.mongodb.repository.Aggregation; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import org.springframework.stereotype.Repository; +import java.time.Instant; import java.util.List; @Repository @@ -26,4 +29,6 @@ public interface RawResponseRepository extends MongoRepository findInterrogationIdByCollectionInstrumentIdAndProcessDateIsNull(String collectionInstrumentId); + @Query(value = "{ 'payload.campaignId' : ?0, 'recordDate' : { $gte: ?1, $lte: ?2 } }") + Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable); } diff --git a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java index c2005dba..05b18458 100644 --- a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java +++ b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java @@ -23,12 +23,7 @@ import fr.insee.genesis.exceptions.GenesisException; import fr.insee.genesis.infrastructure.repository.RawResponseInputRepository; import fr.insee.genesis.infrastructure.utils.FileUtils; -import fr.insee.genesis.stubs.ConfigStub; -import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; -import fr.insee.genesis.stubs.LunaticJsonRawDataPersistanceStub; -import fr.insee.genesis.stubs.QuestionnaireMetadataPersistencePortStub; -import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; -import fr.insee.genesis.stubs.SurveyUnitQualityToolPerretAdapterStub; +import fr.insee.genesis.stubs.*; import fr.insee.modelefiliere.RawResponseDto; import io.cucumber.java.Before; import io.cucumber.java.en.Given; @@ -39,12 +34,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.*; import org.springframework.test.context.ContextConfiguration; import java.io.IOException; @@ -54,6 +46,7 @@ import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPublicKey; +import java.time.Instant; import java.util.Collections; import java.util.List; @@ -134,6 +127,11 @@ public List getUnprocessedCollectionInstrumentIds() { public void updateProcessDates(List surveyUnitModels) { // Do nothing - stub for test } + + @Override + public Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + return null; + } }; RawResponseController rawResponseController = new RawResponseController( diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java index 9ffe15c0..e75033fa 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java @@ -22,19 +22,17 @@ import fr.insee.genesis.exceptions.GenesisError; import fr.insee.genesis.exceptions.GenesisException; import fr.insee.genesis.infrastructure.document.rawdata.LunaticJsonRawDataDocument; +import fr.insee.genesis.infrastructure.document.rawdata.RawResponseDocument; import fr.insee.genesis.infrastructure.mappers.DataProcessingContextMapper; import fr.insee.genesis.infrastructure.repository.RawResponseInputRepository; import fr.insee.genesis.infrastructure.utils.FileUtils; -import fr.insee.genesis.stubs.ConfigStub; -import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; -import fr.insee.genesis.stubs.LunaticJsonRawDataPersistanceStub; -import fr.insee.genesis.stubs.QuestionnaireMetadataPersistencePortStub; -import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; -import fr.insee.genesis.stubs.SurveyUnitQualityToolPerretAdapterStub; +import fr.insee.genesis.stubs.*; import fr.insee.modelefiliere.RawResponseDto; import lombok.extern.slf4j.Slf4j; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.web.PagedModel; import org.springframework.http.ResponseEntity; @@ -49,6 +47,7 @@ class RawResponseControllerTest { private final FileUtils fileUtils = new FileUtils(new ConfigStub()); private final LunaticJsonRawDataPersistanceStub lunaticJsonRawDataPersistanceStub = new LunaticJsonRawDataPersistanceStub(); + private final RawResponseDataPersistanceStub rawResponseDataPersistanceStub = new RawResponseDataPersistanceStub(); private final SurveyUnitPersistencePortStub surveyUnitPersistencePortStub = new SurveyUnitPersistencePortStub(); private final SurveyUnitQualityToolPerretAdapterStub surveyUnitQualityToolPerretAdapterStub = new SurveyUnitQualityToolPerretAdapterStub(); private final DataProcessingContextPersistancePortStub dataProcessingContextPersistancePortStub = @@ -107,6 +106,10 @@ public List getUnprocessedCollectionInstrumentIds() { public void updateProcessDates(List surveyUnitModels) { } + @Override + public Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + return rawResponseDataPersistanceStub.findByCampaignIdAndDate(campaignId, startDate, endDate, pageable); + } }; private final RawResponseController rawResponseController = new RawResponseController(lunaticJsonRawDataApiPort, rawResponseApiPortStub, rawResponseInputRepositoryStub); @@ -309,11 +312,10 @@ void processJsonRawDataV2Test(){ .contains(interrogationId); } - @Test - void getRawResponsesFromJsonBody() { + void getLunaticJsonRawDataModelFromJsonBody() { //GIVEN - String campaignId = "getRawResponsesFromJsonBody"; + String campaignId = "getLunaticJsonRawDataModelFromJsonBody"; String questionnaireId = campaignId + "_quest"; String interrogationId = "getRawResponsesFromJsonBody_id1"; String varName = "VARName1"; @@ -330,7 +332,29 @@ void getRawResponsesFromJsonBody() { int page=0, size= 10; //WHEN - ResponseEntity> response = rawResponseController.getRawResponsesFromJsonBody(campaignId, starDate, endDate, page, size); + ResponseEntity> response = rawResponseController.getLunaticJsonRawDataModelFromJsonBody(campaignId, starDate, endDate, page, size); + + //THEN + Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); + org.junit.jupiter.api.Assertions.assertNotNull(response.getBody()); + Assertions.assertThat(response.getBody().getContent()).hasSize(1); + } + + @Test + void getRawResponsesFromJsonBody() { + //GIVEN + String campaignId = "getRawResponsesFromJsonBody"; + String questionnaireId = campaignId + "_quest"; + String interrogationId = "getRawResponsesFromJsonBody_id1"; + Instant recordDate = Instant.parse("2025-01-01T01:00:00.000Z"); + + addJsonRawResponseDataDocumentToStub(campaignId, questionnaireId, interrogationId); + + Instant starDate= recordDate.minusSeconds(86400),endDate = recordDate.plusSeconds(86400); + int page=0, size= 10; + + //WHEN + ResponseEntity> response = rawResponseController.getRawResponsesFromJsonBody(campaignId, starDate, endDate, page, size); //THEN Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); @@ -380,4 +404,15 @@ private void addJsonRawDataDocumentToStub(String campaignId, lunaticJsonRawDataPersistanceStub.getMongoStub().add(lunaticJsonDataDocument); } + + private void addJsonRawResponseDataDocumentToStub(String campaignId, String questionnaireId, String interrogationId) { + RawResponseDocument rawResponseDocument = RawResponseDocument.builder() + .campaignId(campaignId) + .collectionInstrumentId(questionnaireId) + .interrogationId(interrogationId) + .recordDate(LocalDateTime.now()) + .build(); + + rawResponseDataPersistanceStub.getMongoStub().add(rawResponseDocument); + } } diff --git a/src/test/java/fr/insee/genesis/stubs/RawResponseDataPersistanceStub.java b/src/test/java/fr/insee/genesis/stubs/RawResponseDataPersistanceStub.java new file mode 100644 index 00000000..2834523c --- /dev/null +++ b/src/test/java/fr/insee/genesis/stubs/RawResponseDataPersistanceStub.java @@ -0,0 +1,51 @@ +package fr.insee.genesis.stubs; + +import fr.insee.genesis.domain.model.surveyunit.Mode; +import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponse; +import fr.insee.genesis.domain.ports.spi.RawResponsePersistencePort; +import fr.insee.genesis.infrastructure.document.rawdata.RawResponseDocument; +import fr.insee.genesis.infrastructure.mappers.RawResponseDocumentMapper; +import lombok.Getter; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +@Getter +public class RawResponseDataPersistanceStub implements RawResponsePersistencePort { + List mongoStub = new ArrayList<>(); + + @Override + public List findRawResponses(String collectionInstrumentId, Mode mode, List interrogationIdList) { + return List.of(); + } + + @Override + public void updateProcessDates(String collectionInstrumentId, Set interrogationIds) { + + } + + @Override + public List getUnprocessedCollectionIds() { + return List.of(); + } + + @Override + public Set findUnprocessedInterrogationIdsByCollectionInstrumentId(String collectionInstrumentId) { + return Set.of(); + } + + @Override + public Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + List foundRaws = mongoStub.stream() + .filter(rawData -> rawData.campaignId().equals(campaignId)) + .toList(); + return new PageImpl<>(RawResponseDocumentMapper.INSTANCE.listDocumentToListModel(foundRaws), + pageable, + foundRaws.size()); + } +} From 8b90338a28b60f80a9c3acb1e3ef9f5d5599e349 Mon Sep 17 00:00:00 2001 From: QDIBYS Date: Mon, 5 Jan 2026 16:39:35 +0100 Subject: [PATCH 2/3] refactor: refactos after CR --- .../domain/service/rawdata/RawResponseService.java | 7 ++++++- .../functional_tests/RawDataDefinitions.java | 14 ++++++++++++-- .../rest/responses/RawResponseControllerTest.java | 10 ++++++++-- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java b/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java index 82697e63..93bb1a6e 100644 --- a/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java +++ b/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java @@ -33,7 +33,12 @@ import java.io.IOException; import java.time.Instant; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; @Service diff --git a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java index 05b18458..5d8d9a75 100644 --- a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java +++ b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java @@ -23,7 +23,12 @@ import fr.insee.genesis.exceptions.GenesisException; import fr.insee.genesis.infrastructure.repository.RawResponseInputRepository; import fr.insee.genesis.infrastructure.utils.FileUtils; -import fr.insee.genesis.stubs.*; +import fr.insee.genesis.stubs.ConfigStub; +import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; +import fr.insee.genesis.stubs.LunaticJsonRawDataPersistanceStub; +import fr.insee.genesis.stubs.QuestionnaireMetadataPersistencePortStub; +import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; +import fr.insee.genesis.stubs.SurveyUnitQualityToolPerretAdapterStub; import fr.insee.modelefiliere.RawResponseDto; import io.cucumber.java.Before; import io.cucumber.java.en.Given; @@ -36,7 +41,12 @@ import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.test.context.ContextConfiguration; import java.io.IOException; diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java index e75033fa..53cb14f2 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java @@ -26,7 +26,13 @@ import fr.insee.genesis.infrastructure.mappers.DataProcessingContextMapper; import fr.insee.genesis.infrastructure.repository.RawResponseInputRepository; import fr.insee.genesis.infrastructure.utils.FileUtils; -import fr.insee.genesis.stubs.*; +import fr.insee.genesis.stubs.ConfigStub; +import fr.insee.genesis.stubs.DataProcessingContextPersistancePortStub; +import fr.insee.genesis.stubs.LunaticJsonRawDataPersistanceStub; +import fr.insee.genesis.stubs.QuestionnaireMetadataPersistencePortStub; +import fr.insee.genesis.stubs.RawResponseDataPersistanceStub; +import fr.insee.genesis.stubs.SurveyUnitPersistencePortStub; +import fr.insee.genesis.stubs.SurveyUnitQualityToolPerretAdapterStub; import fr.insee.modelefiliere.RawResponseDto; import lombok.extern.slf4j.Slf4j; import org.assertj.core.api.Assertions; @@ -336,7 +342,7 @@ void getLunaticJsonRawDataModelFromJsonBody() { //THEN Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); - org.junit.jupiter.api.Assertions.assertNotNull(response.getBody()); + Assertions.assertThat(response.getBody()).isNotNull(); Assertions.assertThat(response.getBody().getContent()).hasSize(1); } From eecb0d588a5d8db52b2da68d995f1647dec7bc63 Mon Sep 17 00:00:00 2001 From: QDIBYS Date: Mon, 5 Jan 2026 16:48:51 +0100 Subject: [PATCH 3/3] fix: more RawResponse to RawResponseModel --- .../rest/responses/RawResponseController.java | 6 +++--- .../domain/ports/api/RawResponseApiPort.java | 2 +- .../ports/spi/RawResponsePersistencePort.java | 2 +- .../service/rawdata/RawResponseService.java | 2 +- .../adapter/RawResponseMongoAdapter.java | 4 ++-- .../functional_tests/RawDataDefinitions.java | 2 +- .../responses/RawResponseControllerTest.java | 4 ++-- .../stubs/RawResponseDataPersistanceStub.java | 19 +++++++++++++++---- 8 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java index fc8cd35d..ec4d9aa0 100644 --- a/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java +++ b/src/main/java/fr/insee/genesis/controller/rest/responses/RawResponseController.java @@ -12,7 +12,7 @@ import fr.insee.genesis.domain.model.surveyunit.Mode; import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult; import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel; -import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponse; +import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponseModel; import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort; import fr.insee.genesis.domain.ports.api.RawResponseApiPort; import fr.insee.genesis.exceptions.GenesisError; @@ -288,7 +288,7 @@ public ResponseEntity> getLunaticJsonRawData @Operation(summary = "Get rawResponse JSON data from one campaign in Genesis Database, filtered by start and end dates") @GetMapping(path = "/raw-responses/{campaignId}") @PreAuthorize("hasRole('USER_BATCH_GENERIC')") - public ResponseEntity> getRawResponsesFromJsonBody( + public ResponseEntity> getRawResponsesFromJsonBody( @PathVariable String campaignId, @RequestParam(value = "startDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Instant startDate, @RequestParam(value = "endDate", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Instant endDate, @@ -297,7 +297,7 @@ public ResponseEntity> getRawResponsesFromJsonBody( ) { log.info("Try to read raw JSONs for campaign {}, with startDate={} and endDate={} - page={} - size={}", campaignId, startDate, endDate,page,size); Pageable pageable = PageRequest.of(page, size); - Page rawResponses = rawResponseApiPort.findRawResponseDataByCampaignIdAndDate(campaignId, startDate, endDate, pageable); + Page rawResponses = rawResponseApiPort.findRawResponseDataByCampaignIdAndDate(campaignId, startDate, endDate, pageable); log.info("rawResponses={}", rawResponses.getContent().size()); return ResponseEntity.status(HttpStatus.OK).body(new PagedModel<>(rawResponses)); } diff --git a/src/main/java/fr/insee/genesis/domain/ports/api/RawResponseApiPort.java b/src/main/java/fr/insee/genesis/domain/ports/api/RawResponseApiPort.java index 08ccb069..2b13bd31 100644 --- a/src/main/java/fr/insee/genesis/domain/ports/api/RawResponseApiPort.java +++ b/src/main/java/fr/insee/genesis/domain/ports/api/RawResponseApiPort.java @@ -22,5 +22,5 @@ public interface RawResponseApiPort { List convertRawResponse(List rawResponses, VariablesMap variablesMap); List getUnprocessedCollectionInstrumentIds(); void updateProcessDates(List surveyUnitModels); - Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable); + Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable); } diff --git a/src/main/java/fr/insee/genesis/domain/ports/spi/RawResponsePersistencePort.java b/src/main/java/fr/insee/genesis/domain/ports/spi/RawResponsePersistencePort.java index ae8a21ae..17c25dce 100644 --- a/src/main/java/fr/insee/genesis/domain/ports/spi/RawResponsePersistencePort.java +++ b/src/main/java/fr/insee/genesis/domain/ports/spi/RawResponsePersistencePort.java @@ -16,5 +16,5 @@ public interface RawResponsePersistencePort { void updateProcessDates(String collectionInstrumentId, Set interrogationIds); List getUnprocessedCollectionIds(); Set findUnprocessedInterrogationIdsByCollectionInstrumentId(String collectionInstrumentId); - Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable); + Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable); } diff --git a/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java b/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java index 1b4863de..ca1fbc29 100644 --- a/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java +++ b/src/main/java/fr/insee/genesis/domain/service/rawdata/RawResponseService.java @@ -464,7 +464,7 @@ private static void convertToExternalVar(SurveyUnitModel dstSurveyUnitModel, Var } @Override - public Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + public Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { return rawResponsePersistencePort.findByCampaignIdAndDate(campaignId,startDate, endDate,pageable); } } diff --git a/src/main/java/fr/insee/genesis/infrastructure/adapter/RawResponseMongoAdapter.java b/src/main/java/fr/insee/genesis/infrastructure/adapter/RawResponseMongoAdapter.java index 3db41e22..1c95f507 100644 --- a/src/main/java/fr/insee/genesis/infrastructure/adapter/RawResponseMongoAdapter.java +++ b/src/main/java/fr/insee/genesis/infrastructure/adapter/RawResponseMongoAdapter.java @@ -70,9 +70,9 @@ public Set findUnprocessedInterrogationIdsByCollectionInstrumentId(Strin } @Override - public Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + public Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { Page rawDataDocs = repository.findByCampaignIdAndDate(campaignId, startDate, endDate, pageable); - List modelList = RawResponseDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs.getContent()); + List modelList = RawResponseDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs.getContent()); return new PageImpl<>(modelList, rawDataDocs.getPageable(), rawDataDocs.getTotalElements()); } } diff --git a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java index fd12a6a0..dc0587eb 100644 --- a/src/test/java/cucumber/functional_tests/RawDataDefinitions.java +++ b/src/test/java/cucumber/functional_tests/RawDataDefinitions.java @@ -144,7 +144,7 @@ public void updateProcessDates(List surveyUnitModels) { } @Override - public Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + public Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { return null; } }; diff --git a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java index e61f254b..19ba4eb9 100644 --- a/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java +++ b/src/test/java/fr/insee/genesis/controller/rest/responses/RawResponseControllerTest.java @@ -118,7 +118,7 @@ public void updateProcessDates(List surveyUnitModels) { } @Override - public Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + public Page findRawResponseDataByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { return rawResponseDataPersistanceStub.findByCampaignIdAndDate(campaignId, startDate, endDate, pageable); } }; @@ -365,7 +365,7 @@ void getRawResponsesFromJsonBody() { int page=0, size= 10; //WHEN - ResponseEntity> response = rawResponseController.getRawResponsesFromJsonBody(campaignId, starDate, endDate, page, size); + ResponseEntity> response = rawResponseController.getRawResponsesFromJsonBody(campaignId, starDate, endDate, page, size); //THEN Assertions.assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); diff --git a/src/test/java/fr/insee/genesis/stubs/RawResponseDataPersistanceStub.java b/src/test/java/fr/insee/genesis/stubs/RawResponseDataPersistanceStub.java index 2834523c..24265282 100644 --- a/src/test/java/fr/insee/genesis/stubs/RawResponseDataPersistanceStub.java +++ b/src/test/java/fr/insee/genesis/stubs/RawResponseDataPersistanceStub.java @@ -1,7 +1,7 @@ package fr.insee.genesis.stubs; import fr.insee.genesis.domain.model.surveyunit.Mode; -import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponse; +import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponseModel; import fr.insee.genesis.domain.ports.spi.RawResponsePersistencePort; import fr.insee.genesis.infrastructure.document.rawdata.RawResponseDocument; import fr.insee.genesis.infrastructure.mappers.RawResponseDocumentMapper; @@ -20,8 +20,19 @@ public class RawResponseDataPersistanceStub implements RawResponsePersistencePor List mongoStub = new ArrayList<>(); @Override - public List findRawResponses(String collectionInstrumentId, Mode mode, List interrogationIdList) { - return List.of(); + public List findRawResponses(String collectionInstrumentId, Mode mode, List interrogationIdList) { + return RawResponseDocumentMapper.INSTANCE.listDocumentToListModel(mongoStub.stream().filter( + doc -> doc.collectionInstrumentId().equals(collectionInstrumentId) + && Mode.valueOf(doc.mode()).equals(mode) + && interrogationIdList.contains(doc.interrogationId()) + ).toList()); + } + + @Override + public List findRawResponsesByInterrogationID(String interrogationId) { + return RawResponseDocumentMapper.INSTANCE.listDocumentToListModel(mongoStub.stream().filter( + doc -> doc.interrogationId().equals(interrogationId) + ).toList()); } @Override @@ -40,7 +51,7 @@ public Set findUnprocessedInterrogationIdsByCollectionInstrumentId(Strin } @Override - public Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { + public Page findByCampaignIdAndDate(String campaignId, Instant startDate, Instant endDate, Pageable pageable) { List foundRaws = mongoStub.stream() .filter(rawData -> rawData.campaignId().equals(campaignId)) .toList();