Skip to content

Commit 5887ad9

Browse files
Merge pull request #351 from InseeFr/fixProcessRawData
Fix Process raw data by questionId
2 parents 641aa51 + aed130c commit 5887ad9

11 files changed

Lines changed: 65 additions & 9 deletions

File tree

src/main/java/fr/insee/genesis/controller/rest/responses/ModeController.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@
33
import fr.insee.genesis.controller.rest.CommonApiResponse;
44
import fr.insee.genesis.domain.model.surveyunit.Mode;
55
import fr.insee.genesis.domain.ports.api.SurveyUnitApiPort;
6+
import fr.insee.genesis.exceptions.QuestionnaireNotFoundException;
67
import io.swagger.v3.oas.annotations.Operation;
78
import lombok.extern.slf4j.Slf4j;
9+
import org.springframework.http.HttpStatus;
810
import org.springframework.http.ResponseEntity;
911
import org.springframework.stereotype.Controller;
1012
import org.springframework.web.bind.annotation.GetMapping;
1113
import org.springframework.web.bind.annotation.RequestMapping;
1214
import org.springframework.web.bind.annotation.RequestParam;
1315

16+
import java.util.Collections;
1417
import java.util.List;
1518

1619
@RequestMapping(path = "/modes" )
@@ -29,8 +32,13 @@ public ModeController(SurveyUnitApiPort surveyUnitService) {
2932
@Operation(summary = "List sources/modes used for a given collection instrument (ex questionnaire)")
3033
@GetMapping(path = "/by-questionnaire")
3134
public ResponseEntity<List<Mode>> getModesByQuestionnaire(@RequestParam("questionnaireId") String collectionInstrumentId) {
32-
List<Mode> modes = surveyUnitService.findModesByCollectionInstrumentId(collectionInstrumentId);
33-
return ResponseEntity.ok(modes);
35+
try {
36+
List<Mode> modes = surveyUnitService.findModesByCollectionInstrumentId(collectionInstrumentId);
37+
return ResponseEntity.ok(modes);
38+
} catch (QuestionnaireNotFoundException e) {
39+
return ResponseEntity.status(HttpStatus.NOT_FOUND)
40+
.body(Collections.emptyList());
41+
}
3442
}
3543

3644
@Operation(summary = "List sources/modes used for a given campaign")

src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ public ResponseEntity<SurveyUnitSimplified> getLatestByInterrogationOneObject(@R
300300
.collectionInstrumentId(responses.getFirst().getCollectionInstrumentId())
301301
.campaignId(responses.getFirst().getCampaignId())
302302
.interrogationId(responses.getFirst().getInterrogationId())
303+
.mode(mode)
303304
.usualSurveyUnitId(responses.getFirst().getUsualSurveyUnitId())
304305
.validationDate(validationDate)
305306
.questionnaireState(questionnaireState)

src/main/java/fr/insee/genesis/domain/ports/api/LunaticJsonRawDataApiPort.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public interface LunaticJsonRawDataApiPort {
2121

2222
void save(LunaticJsonRawDataModel rawData);
2323
List<LunaticJsonRawDataModel> getRawData(String campaignName, Mode mode, List<String> interrogationIdList);
24+
List<LunaticJsonRawDataModel> getRawDataByQuestionnaireId(String questionnaireId, Mode mode, List<String> interrogationIdList);
2425
List<SurveyUnitModel> convertRawData(List<LunaticJsonRawDataModel> rawData, VariablesMap variablesMap);
2526
List<LunaticJsonRawDataUnprocessedDto> getUnprocessedDataIds();
2627
Set<String> getUnprocessedDataQuestionnaireIds();

src/main/java/fr/insee/genesis/domain/ports/spi/LunaticJsonRawDataPersistencePort.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public interface LunaticJsonRawDataPersistencePort {
1515

1616
void save(LunaticJsonRawDataModel rawData);
1717
List<LunaticJsonRawDataModel> findRawData(String campaignName, Mode mode, List<String> interrogationIdList);
18+
List<LunaticJsonRawDataModel> findRawDataByQuestionnaireId(String questionnaireId, Mode mode, List<String> interrogationIdList);
1819
List<LunaticJsonRawDataModel> findRawDataByInterrogationID(String interrogationId);
1920
List<LunaticJsonRawDataModel> getAllUnprocessedData();
2021
void updateProcessDates(String campaignId, Set<String> interrogationIds);

src/main/java/fr/insee/genesis/domain/service/rawdata/LunaticJsonRawDataService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ public List<LunaticJsonRawDataModel> getRawData(String campaignName, Mode mode,
101101
}
102102

103103
@Override
104+
public List<LunaticJsonRawDataModel> getRawDataByQuestionnaireId(String questionnaireId, Mode mode, List<String> interrogationIdList) {
105+
return lunaticJsonRawDataPersistencePort.findRawDataByQuestionnaireId(questionnaireId, mode, interrogationIdList);
106+
}
107+
108+
@Override
104109
public List<LunaticJsonRawDataModel> getRawDataByInterrogationId(String interrogationId) {
105110
return lunaticJsonRawDataPersistencePort.findRawDataByInterrogationID(interrogationId);
106111
}
@@ -230,7 +235,7 @@ private VariablesMap getVariablesMap(String questionnaireId, Mode mode, List<Gen
230235

231236
private List<SurveyUnitModel> getConvertedSurveyUnits(String questionnaireId, Mode mode, List<String> interrogationIdListForMode, int maxIndex, VariablesMap variablesMap) {
232237
List<String> interrogationIdToProcess = interrogationIdListForMode.subList(0, maxIndex);
233-
List<LunaticJsonRawDataModel> rawData = getRawData(questionnaireId, mode, interrogationIdToProcess);
238+
List<LunaticJsonRawDataModel> rawData = getRawDataByQuestionnaireId(questionnaireId, mode, interrogationIdToProcess);
234239
return convertRawData(
235240
rawData,
236241
variablesMap

src/main/java/fr/insee/genesis/domain/service/surveyunit/SurveyUnitService.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import fr.insee.genesis.domain.service.metadata.QuestionnaireMetadataService;
2121
import fr.insee.genesis.domain.utils.GroupUtils;
2222
import fr.insee.genesis.exceptions.GenesisException;
23+
import fr.insee.genesis.exceptions.QuestionnaireNotFoundException;
2324
import fr.insee.genesis.infrastructure.utils.FileUtils;
2425
import lombok.extern.slf4j.Slf4j;
2526
import org.springframework.beans.factory.annotation.Autowired;
@@ -332,9 +333,12 @@ public List<SurveyUnitModel> findInterrogationIdsAndModesByQuestionnaireId(Strin
332333
@Override
333334
public List<Mode> findModesByCollectionInstrumentId(String collectionInstrumentId) {
334335
List<SurveyUnitModel> surveyUnitModels = surveyUnitPersistencePort.findInterrogationIdsByCollectionInstrumentId(collectionInstrumentId);
335-
List<Mode> sources = new ArrayList<>();
336-
surveyUnitModels.forEach(surveyUnitModel -> sources.add(surveyUnitModel.getMode()));
337-
return sources.stream().distinct().toList();
336+
if (surveyUnitModels == null || surveyUnitModels.isEmpty()) {
337+
log.warn("No collectionInstrument found with id: {}", collectionInstrumentId);
338+
throw new QuestionnaireNotFoundException(collectionInstrumentId);
339+
}
340+
List<Mode> sources = surveyUnitModels.stream().map(SurveyUnitModel::getMode).distinct().toList();
341+
return sources;
338342
}
339343

340344
@Override
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package fr.insee.genesis.exceptions;
2+
3+
public class QuestionnaireNotFoundException extends RuntimeException {
4+
public QuestionnaireNotFoundException(String questionnaireId) {
5+
super("No questionnaire found with id: " + questionnaireId);
6+
}
7+
}

src/main/java/fr/insee/genesis/infrastructure/adapter/LunaticJsonRawDataMongoAdapter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,14 @@ public Set<Mode> findModesByQuestionnaire(String questionnaireId) {
6161

6262
@Override
6363
public List<LunaticJsonRawDataModel> findRawData(String campaignName, Mode mode, List<String> interrogationIdList) {
64-
List<LunaticJsonRawDataDocument> rawDataDocs = repository.findModesByCampaignIdAndByModeAndinterrogationIdIninterrogationIdList(campaignName, mode, interrogationIdList);return LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs);
64+
List<LunaticJsonRawDataDocument> rawDataDocs = repository.findByCampaignModeAndInterrogations(campaignName, mode, interrogationIdList);
65+
return LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs);
66+
}
67+
68+
@Override
69+
public List<LunaticJsonRawDataModel> findRawDataByQuestionnaireId(String questionnaireId, Mode mode, List<String> interrogationIdList) {
70+
List<LunaticJsonRawDataDocument> rawDataDocs = repository.findByQuestionnaireModeAndInterrogations(questionnaireId, mode, interrogationIdList);
71+
return LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs);
6572
}
6673

6774
@Override

src/main/java/fr/insee/genesis/infrastructure/repository/LunaticJsonMongoDBRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ public interface LunaticJsonMongoDBRepository extends MongoRepository<LunaticJso
3737
List<Mode> findModesByQuestionnaireId(String questionnaireId);
3838

3939
@Query(value = "{ 'campaignId' : ?0, 'mode' : ?1, 'interrogationId': {$in: ?2} }")
40-
List<LunaticJsonRawDataDocument> findModesByCampaignIdAndByModeAndinterrogationIdIninterrogationIdList(String campaignName, Mode mode, List<String> interrogationIdList);
40+
List<LunaticJsonRawDataDocument> findByCampaignModeAndInterrogations(String campaignName, Mode mode, List<String> interrogationIdList);
41+
42+
@Query(value = "{ 'questionnaireId' : ?0, 'mode' : ?1, 'interrogationId': {$in: ?2} }")
43+
List<LunaticJsonRawDataDocument> findByQuestionnaireModeAndInterrogations(String questionnaireId, Mode mode, List<String> interrogationIdList);
4144

4245
@Query(value = "{ 'interrogationId': ?0}")
4346
List<LunaticJsonRawDataDocument> findByInterrogationId(String interrogationId);

src/test/java/fr/insee/genesis/stubs/LunaticJsonMongoDBRepositoryStub.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public List<Mode> findModesByQuestionnaireId(String questionnaireId) {
6161
}
6262

6363
@Override
64-
public List<LunaticJsonRawDataDocument> findModesByCampaignIdAndByModeAndinterrogationIdIninterrogationIdList(
64+
public List<LunaticJsonRawDataDocument> findByCampaignModeAndInterrogations(
6565
String campaignName, Mode mode, List<String> interrogationIdList) {
6666
return documents.stream()
6767
.filter(doc -> Objects.equals(doc.campaignId(), campaignName)
@@ -70,6 +70,15 @@ public List<LunaticJsonRawDataDocument> findModesByCampaignIdAndByModeAndinterro
7070
.toList();
7171
}
7272

73+
@Override
74+
public List<LunaticJsonRawDataDocument> findByQuestionnaireModeAndInterrogations(String questionnaireId, Mode mode, List<String> interrogationIdList) {
75+
return documents.stream()
76+
.filter(doc -> Objects.equals(doc.questionnaireId(), questionnaireId)
77+
&& Objects.equals(doc.mode(), mode)
78+
&& interrogationIdList.contains(doc.interrogationId()))
79+
.toList();
80+
}
81+
7382
@Override
7483
public List<LunaticJsonRawDataDocument> findByInterrogationId(String interrogationId) {
7584
return documents.stream()

0 commit comments

Comments
 (0)