Skip to content

Commit 0e2404a

Browse files
committed
feat: filter questionnaire with isReview
1 parent 6649e3c commit 0e2404a

File tree

16 files changed

+70
-12
lines changed

16 files changed

+70
-12
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public ResponseEntity<String> processJsonRawData(
190190
}
191191

192192
@Operation(summary = "Get processed data ids from last n hours (default 24h)")
193-
@PostMapping(path = "/lunatic-json/processed/ids")
193+
@GetMapping(path = "/lunatic-json/processed/ids")
194194
@PreAuthorize("hasRole('SCHEDULER')")
195195
public ResponseEntity<Map<String, List<String>>> getProcessedDataIdsSinceHours(
196196
@RequestParam("questionnaireId") String questionnaireId,

src/main/java/fr/insee/genesis/domain/model/surveyunit/GroupedInterrogation.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,7 @@
1414
public class GroupedInterrogation {
1515

1616
private String questionnaireId;
17+
private String partitionOrCampaignId;
1718
private List<String> interrogationIds;
19+
1820
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,6 @@ void saveKraftwerkExecutionSchedule(String partitionId,
3232

3333
DataProcessingContextModel getContext(String interrogationId) throws GenesisException;
3434
DataProcessingContextModel getContextByPartitionId(String partitionId) throws GenesisException;
35+
36+
List<DataProcessingContextModel> getPartitionIdWithReview(List<String> partitionIds);
3537
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
public interface DataProcessingContextPersistancePort {
1010
DataProcessingContextDocument findByPartitionId(String partitionId);
1111

12+
List<DataProcessingContextModel> findByPartitionIds(List<String> partitionIds);
13+
1214
void save(DataProcessingContextDocument dataProcessingContextDocument);
1315

1416
void saveAll(List<DataProcessingContextDocument> dataProcessingContextDocuments);

src/main/java/fr/insee/genesis/domain/service/context/DataProcessingContextService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,13 @@ public DataProcessingContextModel getContextByPartitionId(String partitionId){
172172
dataProcessingContextPersistancePort.findByPartitionId(partitionId)
173173
);
174174
}
175+
176+
@Override
177+
public List<DataProcessingContextModel> getPartitionIdWithReview (List<String> partitionIds){
178+
List<DataProcessingContextModel> contexts = dataProcessingContextPersistancePort.findByPartitionIds(partitionIds);
179+
if (contexts.isEmpty()){
180+
return List.of();
181+
}
182+
return contexts.stream().filter(DataProcessingContextModel::isWithReview).toList();
183+
}
175184
}

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import fr.insee.genesis.controller.dto.rawdata.LunaticJsonRawDataUnprocessedDto;
66
import fr.insee.genesis.controller.services.MetadataService;
77
import fr.insee.genesis.controller.utils.ControllerUtils;
8+
import fr.insee.genesis.domain.model.context.DataProcessingContextModel;
89
import fr.insee.genesis.domain.model.surveyunit.DataState;
910
import fr.insee.genesis.domain.model.surveyunit.GroupedInterrogation;
1011
import fr.insee.genesis.domain.model.surveyunit.InterrogationId;
@@ -15,6 +16,7 @@
1516
import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel;
1617
import fr.insee.genesis.domain.model.surveyunit.rawdata.RawDataModelType;
1718
import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort;
19+
import fr.insee.genesis.domain.ports.spi.DataProcessingContextPersistancePort;
1820
import fr.insee.genesis.domain.ports.spi.LunaticJsonRawDataPersistencePort;
1921
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService;
2022
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService;
@@ -49,15 +51,18 @@ public class LunaticJsonRawDataService implements LunaticJsonRawDataApiPort {
4951

5052
@Qualifier("lunaticJsonMongoAdapterNew")
5153
private final LunaticJsonRawDataPersistencePort lunaticJsonRawDataPersistencePort;
54+
@Qualifier("dataProcessingContextMongoAdapter")
55+
private final DataProcessingContextPersistancePort dataProcessingContextPersistancePort;
5256

5357
@Autowired
54-
public LunaticJsonRawDataService(LunaticJsonRawDataPersistencePort lunaticJsonRawDataNewPersistencePort, ControllerUtils controllerUtils, MetadataService metadataService, SurveyUnitService surveyUnitService, SurveyUnitQualityService surveyUnitQualityService, FileUtils fileUtils) {
58+
public LunaticJsonRawDataService(LunaticJsonRawDataPersistencePort lunaticJsonRawDataNewPersistencePort, ControllerUtils controllerUtils, MetadataService metadataService, SurveyUnitService surveyUnitService, SurveyUnitQualityService surveyUnitQualityService, FileUtils fileUtils, DataProcessingContextPersistancePort dataProcessingContextPersistancePort) {
5559
this.controllerUtils = controllerUtils;
5660
this.metadataService = metadataService;
5761
this.surveyUnitService = surveyUnitService;
5862
this.surveyUnitQualityService = surveyUnitQualityService;
5963
this.fileUtils = fileUtils;
6064
this.lunaticJsonRawDataPersistencePort = lunaticJsonRawDataNewPersistencePort;
65+
this.dataProcessingContextPersistancePort = dataProcessingContextPersistancePort;
6166
}
6267

6368
@Override
@@ -344,7 +349,11 @@ public long countResponsesByQuestionnaireId(String campaignId) {
344349
@Override
345350
public Map<String, List<String>> findProcessedIdsgroupedByQuestionnaireSince(LocalDateTime since) {
346351
List<GroupedInterrogation> idsByQuestionnaire = lunaticJsonRawDataPersistencePort.findProcessedIdsGroupedByQuestionnaireSince(since);
347-
return idsByQuestionnaire.stream().collect(Collectors.toMap(
352+
List<String> partitionIds = idsByQuestionnaire.stream().map(GroupedInterrogation::getPartitionOrCampaignId).toList();
353+
List<DataProcessingContextModel> contexts = dataProcessingContextPersistancePort.findByPartitionIds(partitionIds);
354+
List<String> partitionIdsWithReview = contexts.stream().filter(DataProcessingContextModel::isWithReview).map(DataProcessingContextModel::getPartitionId).toList();
355+
return idsByQuestionnaire.stream().filter(groupedInterrogation -> partitionIdsWithReview.contains(groupedInterrogation.getPartitionOrCampaignId()))
356+
.collect(Collectors.toMap(
348357
GroupedInterrogation::getQuestionnaireId,
349358
GroupedInterrogation::getInterrogationIds
350359
));

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import fr.insee.genesis.domain.model.context.schedule.KraftwerkExecutionSchedule;
66
import fr.insee.genesis.domain.ports.spi.DataProcessingContextPersistancePort;
77
import fr.insee.genesis.infrastructure.document.context.DataProcessingContextDocument;
8+
import fr.insee.genesis.infrastructure.mappers.DataProcessingContextMapper;
89
import fr.insee.genesis.infrastructure.repository.DataProcessingContextMongoDBRepository;
910
import fr.insee.genesis.infrastructure.utils.context.ContextDedupUtils;
1011
import lombok.extern.slf4j.Slf4j;
@@ -41,6 +42,13 @@ public DataProcessingContextDocument findByPartitionId(String partitionId) {
4142
return ContextDedupUtils.deduplicateContexts(partitionId, existingDocuments);
4243
}
4344

45+
@Override
46+
public List<DataProcessingContextModel> findByPartitionIds(List<String> partitionIds){
47+
List<DataProcessingContextDocument> existingDocuments =
48+
dataProcessingContextMongoDBRepository.findByPartitionIdList(partitionIds);
49+
return DataProcessingContextMapper.INSTANCE.listDocumentToListModel(ContextDedupUtils.deduplicateContexts(existingDocuments));
50+
}
51+
4452
@Override
4553
public void save(DataProcessingContextDocument dataProcessingContextDocument) {
4654
dataProcessingContextMongoDBRepository.save(dataProcessingContextDocument);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public long countResponsesByQuestionnaireId(String questionnaireId) {
7878

7979
@Override
8080
public List<GroupedInterrogation> findProcessedIdsGroupedByQuestionnaireSince(LocalDateTime since){
81-
return GroupedInterrogationDocumentMapper.INSTANCE.listDocumentToListModel(repository.aggregateRawGroupedByQuestionnaire(since));
81+
return GroupedInterrogationDocumentMapper.INSTANCE.listDocumentToListModel(repository.aggregateRawGrouped(since));
8282
}
8383

8484

src/main/java/fr/insee/genesis/infrastructure/document/surveyunit/GroupedInterrogationDocument.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
public class GroupedInterrogationDocument {
99

1010
private String questionnaireId;
11+
private String partitionOrCampaignId;
1112
private List<String> interrogationIds;
1213
}

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,20 @@ public interface LunaticJsonMongoDBRepository extends MongoRepository<LunaticJso
2323
long countByQuestionnaireId(String questionnaireId);
2424
@Aggregation(pipeline = {
2525
"{ '$match': { 'processDate': { '$gte': ?0 } } }",
26-
"{ '$group': { '_id': '$questionnaireId', 'interrogationIds': { '$addToSet': '$interrogationId' } } }",
27-
"{ '$project': { 'questionnaireId': '$_id', 'interrogationIds': 1, '_id': 0 } }"
26+
"{ '$group': { " +
27+
"'_id': { " +
28+
"'questionnaireId': '$questionnaireId', " +
29+
"'partitionOrCampaignId': { '$ifNull': ['$partitionId', '$campaignId'] } " +
30+
"}, " +
31+
"'interrogationIds': { '$addToSet': '$interrogationId' } " +
32+
"} }",
33+
"{ '$project': { " +
34+
"'questionnaireId': '$_id.questionnaireId', " +
35+
"'partitionOrCampaignId': '$_id.partitionOrCampaignId', " +
36+
"'interrogationIds': 1, " +
37+
"'_id': 0 " +
38+
"} }"
2839
})
29-
List<GroupedInterrogationDocument> aggregateRawGroupedByQuestionnaire(LocalDateTime since);
40+
List<GroupedInterrogationDocument> aggregateRawGrouped(LocalDateTime since);
3041

3142
}

0 commit comments

Comments
 (0)