Skip to content

Commit eee89db

Browse files
committed
feat: WIP implementing new model of raw responses
1 parent 8d7eec1 commit eee89db

21 files changed

+507
-3
lines changed

src/main/java/fr/insee/genesis/controller/dto/ScheduleDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
@Builder
1010
public record ScheduleDto (String surveyName,
11+
String collectionInstrumentId,
1112
LocalDateTime lastExecution,
1213
List<KraftwerkExecutionSchedule> kraftwerkExecutionScheduleList
1314
){}

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult;
1414
import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel;
1515
import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort;
16+
import fr.insee.genesis.domain.ports.api.RawResponseApiPort;
1617
import fr.insee.genesis.exceptions.GenesisError;
1718
import fr.insee.genesis.exceptions.GenesisException;
1819
import fr.insee.genesis.exceptions.SchemaValidationException;
@@ -54,11 +55,13 @@ public class RawResponseController {
5455
private static final String PARTITION_ID = "partitionId";
5556
private static final String INTERROGATION_ID = "interrogationId";
5657
private final LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort;
58+
private final RawResponseApiPort rawResponseApiPort;
5759
private final RawResponseInputRepository rawRepository;
5860

5961

60-
public RawResponseController(LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort, RawResponseInputRepository rawRepository) {
62+
public RawResponseController(LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort, RawResponseApiPort rawResponseApiPort, RawResponseInputRepository rawRepository) {
6163
this.lunaticJsonRawDataApiPort = lunaticJsonRawDataApiPort;
64+
this.rawResponseApiPort = rawResponseApiPort;
6265
this.rawRepository = rawRepository;
6366
}
6467

@@ -186,6 +189,28 @@ public ResponseEntity<String> saveRawResponsesFromRawResponseDto(
186189
return ResponseEntity.status(201).body(String.format(SUCCESS_MESSAGE, dto.getInterrogationId()));
187190
}
188191

192+
//PROCESS
193+
@Operation(summary = "Process raw data of a campaign")
194+
@PostMapping(path = "/raw-responses/process")
195+
@PreAuthorize("hasRole('SCHEDULER')")
196+
public ResponseEntity<String> processRawResponses(
197+
@RequestParam("questionnaireId") String questionnaireId,
198+
@RequestBody List<String> interrogationIdList
199+
) {
200+
log.info("Try to process raw responses for questionnaireId {} and {} interrogationIds", interrogationIdList.size());
201+
List<GenesisError> errors = new ArrayList<>();
202+
203+
try {
204+
DataProcessResult result = rawResponseApiPort.processRawResponses(questionnaireId, interrogationIdList, errors);
205+
return result.formattedDataCount() == 0 ?
206+
ResponseEntity.ok("%d document(s) processed".formatted(result.dataCount()))
207+
: ResponseEntity.ok("%d document(s) processed, including %d FORMATTED after data verification"
208+
.formatted(result.dataCount(), result.formattedDataCount()));
209+
} catch (GenesisException e) {
210+
return ResponseEntity.status(e.getStatus()).body(e.getMessage());
211+
}
212+
}
213+
189214
//GET unprocessed
190215
@Operation(summary = "Get campaign id and interrogationId from all unprocessed raw json data")
191216
@GetMapping(path = "/responses/raw/lunatic-json/get/unprocessed")

src/main/java/fr/insee/genesis/domain/model/context/DataProcessingContextModel.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public class DataProcessingContextModel {
2222

2323
private String partitionId;
2424

25+
private String collectionInstrumentId; //QuestionnaireId
26+
2527
private LocalDateTime lastExecution;
2628

2729
List<KraftwerkExecutionSchedule> kraftwerkExecutionScheduleList;
@@ -31,6 +33,7 @@ public class DataProcessingContextModel {
3133
public ScheduleDto toScheduleDto(){
3234
return ScheduleDto.builder()
3335
.surveyName(partitionId)
36+
.collectionInstrumentId(collectionInstrumentId)
3437
.lastExecution(lastExecution)
3538
.kraftwerkExecutionScheduleList(kraftwerkExecutionScheduleList)
3639
.build();

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,18 @@
1010
import java.util.List;
1111
import java.util.Objects;
1212

13+
/*
14+
* This model class should be in equation with the model of our information system ("modèle filière)
15+
* Its up to the adapter and mappers to deal with old fields
16+
*
17+
*/
1318
@Builder
1419
@Data
1520
@NoArgsConstructor
1621
@AllArgsConstructor
1722
public class SurveyUnitModel {
1823

24+
1925
private String questionnaireId;
2026
private String campaignId;
2127
private String interrogationId;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package fr.insee.genesis.domain.model.surveyunit.rawdata;
2+
3+
import fr.insee.genesis.domain.model.surveyunit.Mode;
4+
import org.bson.types.ObjectId;
5+
6+
import java.time.LocalDateTime;
7+
import java.util.Map;
8+
9+
public record RawResponse(
10+
ObjectId id,
11+
String interrogationId,
12+
String collectionInstrumentId,
13+
Mode mode,
14+
Map<String,Object> payload,
15+
LocalDateTime recordDate,
16+
LocalDateTime processDate
17+
)
18+
{}

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

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

3333
DataProcessingContextModel getContext(String interrogationId) throws GenesisException;
3434
DataProcessingContextModel getContextByPartitionId(String partitionId) throws GenesisException;
35+
36+
DataProcessingContextModel getContextByCollectionInstrumentId(String collectionInstrumentId);
37+
3538
List<String> getPartitionIds(boolean withReview);
3639

3740
/**
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package fr.insee.genesis.domain.ports.api;
2+
3+
import fr.insee.bpm.metadata.model.VariablesMap;
4+
import fr.insee.genesis.domain.model.surveyunit.Mode;
5+
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
6+
import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult;
7+
import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponse;
8+
import fr.insee.genesis.exceptions.GenesisError;
9+
import fr.insee.genesis.exceptions.GenesisException;
10+
11+
import java.util.List;
12+
13+
public interface RawResponseApiPort {
14+
15+
List<RawResponse> getRawResponses(String questionnaireModelId, Mode mode, List<String> interrogationIdList);
16+
DataProcessResult processRawResponses(String questionnaireId, List<String> interrogationIdList, List<GenesisError> errors) throws GenesisException;
17+
List<SurveyUnitModel> convertRawResponse(List<RawResponse> rawResponses, VariablesMap variablesMap);
18+
void updateProcessDates(List<SurveyUnitModel> surveyUnitModels);
19+
}

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
@@ -11,6 +11,8 @@ public interface DataProcessingContextPersistancePort {
1111

1212
List<DataProcessingContextModel> findByPartitionIds(List<String> partitionIds);
1313

14+
List<DataProcessingContextModel> findByCollectionInstrumentIds(List<String> collectionInstrumentIds);
15+
1416
void save(DataProcessingContextDocument dataProcessingContextDocument);
1517

1618
void saveAll(List<DataProcessingContextDocument> dataProcessingContextDocuments);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package fr.insee.genesis.domain.ports.spi;
2+
3+
import fr.insee.genesis.domain.model.surveyunit.Mode;
4+
import fr.insee.genesis.domain.model.surveyunit.rawdata.RawResponse;
5+
6+
import java.util.List;
7+
import java.util.Set;
8+
9+
public interface RawResponsePersistencePort {
10+
11+
List<RawResponse> findRawResponses(String questionnaireId, Mode mode, List<String> interrogationIdList);
12+
13+
14+
void updateProcessDates(String collectionInstrumentId, Set<String> interrogationIds);
15+
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,13 @@ public DataProcessingContextModel getContextByPartitionId(String partitionId){
174174
);
175175
}
176176

177+
@Override
178+
public DataProcessingContextModel getContextByCollectionInstrumentId(String collectionInstrumentId){
179+
return DataProcessingContextMapper.INSTANCE.documentToModel(
180+
dataProcessingContextPersistancePort.findByPartitionId(collectionInstrumentId)
181+
);
182+
}
183+
177184
@Override
178185
public List<String> getPartitionIds(boolean withReview){
179186
List<String> partitionIds = new ArrayList<>();

0 commit comments

Comments
 (0)