Skip to content

Commit 010a7c1

Browse files
committed
Fix Process raw data by questionId
1 parent 8683cc2 commit 010a7c1

File tree

11 files changed

+64
-9
lines changed

11 files changed

+64
-9
lines changed

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 questionnaire")
3033
@GetMapping(path = "/by-questionnaire")
3134
public ResponseEntity<List<Mode>> getModesByQuestionnaire(@RequestParam("questionnaireId") String questionnaireId) {
32-
List<Mode> modes = surveyUnitService.findModesByQuestionnaireId(questionnaireId);
33-
return ResponseEntity.ok(modes);
35+
try {
36+
List<Mode> modes = surveyUnitService.findModesByQuestionnaireId(questionnaireId);
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
@@ -252,6 +252,7 @@ public ResponseEntity<SurveyUnitSimplified> getLatestByInterrogationOneObject(@R
252252
.campaignId(responses.getFirst().getCampaignId())
253253
.interrogationId(responses.getFirst().getInterrogationId())
254254
.surveyUnitId(responses.getFirst().getIdUE())
255+
.mode(mode)
255256
.variablesUpdate(outputVariables)
256257
.externalVariables(outputExternalVariables)
257258
.build());

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
void updateProcessDates(List<SurveyUnitModel> surveyUnitModels);

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> getAllUnprocessedData();
1920
void updateProcessDates(String campaignId, Set<String> interrogationIds);
2021
Set<String> findDistinctQuestionnaireIds();

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
@@ -99,6 +99,11 @@ public List<LunaticJsonRawDataModel> getRawData(String campaignName, Mode mode,
9999
return lunaticJsonRawDataPersistencePort.findRawData(campaignName, mode, interrogationIdList);
100100
}
101101

102+
@Override
103+
public List<LunaticJsonRawDataModel> getRawDataByQuestionnaireId(String questionnaireId, Mode mode, List<String> interrogationIdList) {
104+
return lunaticJsonRawDataPersistencePort.findRawDataByQuestionnaireId(questionnaireId, mode, interrogationIdList);
105+
}
106+
102107
@Override
103108
@Deprecated(since = "1.13.0")
104109
public DataProcessResult processRawData(String campaignName, List<String> interrogationIdList, List<GenesisError> errors) throws GenesisException {
@@ -224,7 +229,7 @@ private VariablesMap getVariablesMap(String questionnaireId, Mode mode, List<Gen
224229

225230
private List<SurveyUnitModel> getConvertedSurveyUnits(String questionnaireId, Mode mode, List<String> interrogationIdListForMode, int maxIndex, VariablesMap variablesMap) {
226231
List<String> interrogationIdToProcess = interrogationIdListForMode.subList(0, maxIndex);
227-
List<LunaticJsonRawDataModel> rawData = getRawData(questionnaireId, mode, interrogationIdToProcess);
232+
List<LunaticJsonRawDataModel> rawData = getRawDataByQuestionnaireId(questionnaireId, mode, interrogationIdToProcess);
228233
return convertRawData(
229234
rawData,
230235
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;
@@ -336,9 +337,12 @@ public List<SurveyUnitModel> findInterrogationIdsAndModesByQuestionnaireId(Strin
336337
@Override
337338
public List<Mode> findModesByQuestionnaireId(String questionnaireId) {
338339
List<SurveyUnitModel> surveyUnitModels = surveyUnitPersistencePort.findInterrogationIdsByQuestionnaireId(questionnaireId);
339-
List<Mode> sources = new ArrayList<>();
340-
surveyUnitModels.forEach(surveyUnitModel -> sources.add(surveyUnitModel.getMode()));
341-
return sources.stream().distinct().toList();
340+
if (surveyUnitModels == null || surveyUnitModels.isEmpty()) {
341+
log.warn("No questionnaire found with id: {}", questionnaireId);
342+
throw new QuestionnaireNotFoundException(questionnaireId);
343+
}
344+
List<Mode> sources = surveyUnitModels.stream().map(SurveyUnitModel::getMode).distinct().toList();
345+
return sources;
342346
}
343347

344348
@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
@@ -52,7 +52,14 @@ public List<LunaticJsonRawDataModel> getAllUnprocessedData() {
5252

5353
@Override
5454
public List<LunaticJsonRawDataModel> findRawData(String campaignName, Mode mode, List<String> interrogationIdList) {
55-
List<LunaticJsonRawDataDocument> rawDataDocs = repository.findModesByCampaignIdAndByModeAndinterrogationIdIninterrogationIdList(campaignName, mode, interrogationIdList);return LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs);
55+
List<LunaticJsonRawDataDocument> rawDataDocs = repository.findByCampaignModeAndInterrogations(campaignName, mode, interrogationIdList);
56+
return LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs);
57+
}
58+
59+
@Override
60+
public List<LunaticJsonRawDataModel> findRawDataByQuestionnaireId(String questionnaireId, Mode mode, List<String> interrogationIdList) {
61+
List<LunaticJsonRawDataDocument> rawDataDocs = repository.findByQuestionnaireModeAndInterrogations(questionnaireId, mode, interrogationIdList);
62+
return LunaticJsonRawDataDocumentMapper.INSTANCE.listDocumentToListModel(rawDataDocs);
5663
}
5764

5865
@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
@@ -24,7 +24,10 @@ public interface LunaticJsonMongoDBRepository extends MongoRepository<LunaticJso
2424
List<Mode> findModesByCampaignId(String campaignId);
2525

2626
@Query(value = "{ 'campaignId' : ?0, 'mode' : ?1, 'interrogationId': {$in: ?2} }")
27-
List<LunaticJsonRawDataDocument> findModesByCampaignIdAndByModeAndinterrogationIdIninterrogationIdList(String campaignName, Mode mode, List<String> interrogationIdList);
27+
List<LunaticJsonRawDataDocument> findByCampaignModeAndInterrogations(String campaignName, Mode mode, List<String> interrogationIdList);
28+
29+
@Query(value = "{ 'questionnaireId' : ?0, 'mode' : ?1, 'interrogationId': {$in: ?2} }")
30+
List<LunaticJsonRawDataDocument> findByQuestionnaireModeAndInterrogations(String questionnaireId, Mode mode, List<String> interrogationIdList);
2831

2932
Page<LunaticJsonRawDataDocument> findByCampaignIdAndRecordDateBetween(String campagneId, Instant start, Instant end, Pageable pageable);
3033
long countByQuestionnaireId(String questionnaireId);

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public List<Mode> findModesByCampaignId(String campaignId) {
4747
}
4848

4949
@Override
50-
public List<LunaticJsonRawDataDocument> findModesByCampaignIdAndByModeAndinterrogationIdIninterrogationIdList(
50+
public List<LunaticJsonRawDataDocument> findByCampaignModeAndInterrogations(
5151
String campaignName, Mode mode, List<String> interrogationIdList) {
5252
return documents.stream()
5353
.filter(doc -> Objects.equals(doc.campaignId(), campaignName)
@@ -56,6 +56,15 @@ public List<LunaticJsonRawDataDocument> findModesByCampaignIdAndByModeAndinterro
5656
.toList();
5757
}
5858

59+
@Override
60+
public List<LunaticJsonRawDataDocument> findByQuestionnaireModeAndInterrogations(String questionnaireId, Mode mode, List<String> interrogationIdList) {
61+
return documents.stream()
62+
.filter(doc -> Objects.equals(doc.questionnaireId(), questionnaireId)
63+
&& Objects.equals(doc.mode(), mode)
64+
&& interrogationIdList.contains(doc.interrogationId()))
65+
.toList();
66+
}
67+
5968
@Override
6069
public Page<LunaticJsonRawDataDocument> findByCampaignIdAndRecordDateBetween(String campagneId, Instant start, Instant end, Pageable pageable){
6170
return Page.empty(pageable);

0 commit comments

Comments
 (0)