Skip to content

Commit dd7dada

Browse files
committed
external variables management
1 parent 77d2b3c commit dd7dada

File tree

4 files changed

+78
-30
lines changed

4 files changed

+78
-30
lines changed

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -373,8 +373,7 @@ public ResponseEntity<Object> saveEditedVariables(
373373
@RequestParam("campaignId") String campaignId,
374374
@RequestParam("mode") Mode mode,
375375
@RequestParam("idQuestionnaire") String idQuestionnaire,
376-
@RequestParam("idUE") String idUE,
377-
@RequestBody List<VariableDto> variables
376+
@RequestBody SurveyUnitDto surveyUnitDto
378377
){
379378
//Parse metadata
380379
//TODO Get metadatas from database once devs are merged into main (VariableTypes collection)
@@ -392,11 +391,19 @@ public ResponseEntity<Object> saveEditedVariables(
392391
}
393392

394393
//Check if input edited variables are in metadatas
395-
List<String> absentVariableNames = surveyUnitQualityService.checkVariablesPresentInMetadata(variables,
394+
List<String> absentCollectedVariableNames =
395+
surveyUnitQualityService.checkVariablesPresentInMetadata(surveyUnitDto.getCollectedVariables(),
396396
variablesMap);
397-
if(!absentVariableNames.isEmpty()){
397+
List<String> absentExternalVariableNames =
398+
surveyUnitQualityService.checkVariablesPresentInMetadata(surveyUnitDto.getExternalVariables(),
399+
variablesMap);
400+
if(!absentCollectedVariableNames.isEmpty() || !absentExternalVariableNames.isEmpty()){
398401
StringBuilder stringBuilder = new StringBuilder();
399-
for(String absentVariableName : absentVariableNames){
402+
for(String absentVariableName : absentCollectedVariableNames){
403+
stringBuilder.append(absentVariableName);
404+
stringBuilder.append("\n");
405+
}
406+
for(String absentVariableName : absentExternalVariableNames){
400407
stringBuilder.append(absentVariableName);
401408
stringBuilder.append("\n");
402409
}
@@ -418,8 +425,7 @@ public ResponseEntity<Object> saveEditedVariables(
418425
campaignId,
419426
mode,
420427
idQuestionnaire,
421-
idUE,
422-
variables,
428+
surveyUnitDto,
423429
userIdentifier,
424430
variablesMap
425431
);

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ public interface SurveyUnitApiPort {
5555
SurveyUnitModel parseEditedVariables(String campaignId,
5656
Mode mode,
5757
String idQuestionnaire,
58-
String idUE,
59-
List<VariableDto> variables,
58+
SurveyUnitDto surveyUnitDto,
6059
String userIdentifier,
6160
VariablesMap variablesMap) throws GenesisException;
6261
}

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

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public SurveyUnitService(SurveyUnitPersistencePort surveyUnitPersistencePort) {
4141
}
4242

4343
@Override
44-
public void saveSurveyUnits(List<SurveyUnitModel> suDtos) {
45-
surveyUnitPersistencePort.saveAll(suDtos);
44+
public void saveSurveyUnits(List<SurveyUnitModel> surveyUnitModels) {
45+
surveyUnitPersistencePort.saveAll(surveyUnitModels);
4646
}
4747

4848
@Override
@@ -238,16 +238,15 @@ public SurveyUnitModel parseEditedVariables(
238238
String campaignId,
239239
Mode mode,
240240
String idQuestionnaire,
241-
String idUE,
242-
List<VariableDto> variables,
241+
SurveyUnitDto surveyUnitDto,
243242
String userIdentifier,
244243
VariablesMap variablesMap
245244
) throws GenesisException {
246245
SurveyUnitModel surveyUnitModel = SurveyUnitModel.builder()
247246
.idCampaign(campaignId)
248247
.mode(mode)
249248
.idQuest(idQuestionnaire)
250-
.idUE(idUE)
249+
.idUE(surveyUnitDto.getSurveyUnitId())
251250
.state(DataState.EDITED)
252251
.recordDate(LocalDateTime.now())
253252
.collectedVariables(new ArrayList<>())
@@ -256,18 +255,25 @@ public SurveyUnitModel parseEditedVariables(
256255
.build();
257256

258257
//Keep only variable dtos who has at least one EDITED variableStateDto
259-
List<VariableDto> editedVariables = variables.stream().filter(
258+
List<VariableDto> editedCollectedVariables = surveyUnitDto.getCollectedVariables().stream().filter(
259+
variableDto -> !variableDto.getVariableStateDtoList().stream().filter(
260+
variableStateDto -> variableStateDto.getState().equals(DataState.EDITED)
261+
).toList().isEmpty()
262+
).toList();
263+
264+
List<VariableDto> editedExternalVariables = surveyUnitDto.getExternalVariables().stream().filter(
260265
variableDto -> !variableDto.getVariableStateDtoList().stream().filter(
261266
variableStateDto -> variableStateDto.getState().equals(DataState.EDITED)
262267
).toList().isEmpty()
263268
).toList();
264269

265270
//Error 400 bad request if no edited variable in list
266-
if(editedVariables.isEmpty()){
271+
if(editedCollectedVariables.isEmpty() && editedExternalVariables.isEmpty()){
267272
throw new GenesisException(400, "No EDITED variable in list");
268273
}
269274

270-
for(VariableDto editedVariableDto : editedVariables){
275+
//Collected variables management
276+
for(VariableDto editedVariableDto : editedCollectedVariables){
271277
CollectedVariable collectedVariable = CollectedVariable.collectedVariableBuilder()
272278
.idVar(editedVariableDto.getVariableName())
273279
.values(new ArrayList<>())
@@ -283,6 +289,19 @@ public SurveyUnitModel parseEditedVariables(
283289
surveyUnitModel.getCollectedVariables().add(collectedVariable);
284290
}
285291

292+
//External variables management
293+
for(VariableDto editedVariableDto : editedExternalVariables){
294+
Variable externalVariable = Variable.builder()
295+
.idVar(editedVariableDto.getVariableName())
296+
.values(new ArrayList<>())
297+
.build();
298+
299+
externalVariable.getValues().add(editedVariableDto.getVariableStateDtoList().stream().filter(variableStateDto ->
300+
variableStateDto.getState().equals(DataState.EDITED)).toList().getFirst().getValue());
301+
302+
surveyUnitModel.getExternalVariables().add(externalVariable);
303+
}
304+
286305
return surveyUnitModel;
287306
}
288307

src/test/java/fr/insee/genesis/controller/rest/responses/ResponseControllerTest.java

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -412,14 +412,19 @@ void saveEditedTest() throws GenesisException {
412412

413413
newVariables.add(variableDto);
414414

415+
SurveyUnitDto surveyUnitDto = SurveyUnitDto.builder()
416+
.surveyUnitId(DEFAULT_ID_UE)
417+
.collectedVariables(newVariables)
418+
.externalVariables(new ArrayList<>())
419+
.build();
420+
415421

416422
//WHEN
417423
responseControllerStatic.saveEditedVariables(
418424
campaignId,
419425
Mode.WEB,
420426
idQuest,
421-
DEFAULT_ID_UE,
422-
newVariables
427+
surveyUnitDto
423428
);
424429

425430
//THEN
@@ -482,13 +487,18 @@ void saveEditedTest_Forced() throws GenesisException {
482487
.build());
483488
newVariables.add(variableDto);
484489

490+
SurveyUnitDto surveyUnitDto = SurveyUnitDto.builder()
491+
.surveyUnitId(DEFAULT_ID_UE)
492+
.collectedVariables(newVariables)
493+
.externalVariables(new ArrayList<>())
494+
.build();
495+
485496
//WHEN
486497
responseControllerStatic.saveEditedVariables(
487498
campaignId,
488499
Mode.WEB,
489500
idQuest,
490-
DEFAULT_ID_UE,
491-
newVariables
501+
surveyUnitDto
492502
);
493503

494504
//THEN
@@ -551,12 +561,19 @@ void saveEditedTest_No_Metadata_Error() throws GenesisException {
551561
.build());
552562
newVariables.add(variableDto);
553563

554-
Assertions.assertThat(responseControllerStatic.saveEditedVariables(
564+
SurveyUnitDto surveyUnitDto = SurveyUnitDto.builder()
565+
.surveyUnitId(DEFAULT_ID_UE)
566+
.collectedVariables(newVariables)
567+
.externalVariables(new ArrayList<>())
568+
.build();
569+
570+
Assertions.assertThat(
571+
responseControllerStatic.saveEditedVariables(
555572
campaignId,
556573
Mode.WEB,
557574
DEFAULT_ID_QUEST,
558-
DEFAULT_ID_UE,
559-
newVariables).getStatusCode()
575+
surveyUnitDto
576+
).getStatusCode()
560577
).isEqualTo(HttpStatusCode.valueOf(404));
561578
}
562579

@@ -583,12 +600,19 @@ void saveEditedTest_No_Edited_Variable_Error(){
583600
.build());
584601
newVariables.add(variableDto);
585602

586-
Assertions.assertThat(responseControllerStatic.saveEditedVariables(
587-
ID_CAMPAIGN_WITH_DDI,
588-
Mode.WEB,
589-
DEFAULT_ID_QUEST,
590-
DEFAULT_ID_UE,
591-
newVariables).getStatusCode()
603+
SurveyUnitDto surveyUnitDto = SurveyUnitDto.builder()
604+
.surveyUnitId(DEFAULT_ID_UE)
605+
.collectedVariables(newVariables)
606+
.externalVariables(new ArrayList<>())
607+
.build();
608+
609+
Assertions.assertThat(
610+
responseControllerStatic.saveEditedVariables(
611+
ID_CAMPAIGN_WITH_DDI,
612+
Mode.WEB,
613+
DEFAULT_ID_QUEST,
614+
surveyUnitDto
615+
).getStatusCode()
592616
).isEqualTo(HttpStatusCode.valueOf(400));
593617
}
594618
}

0 commit comments

Comments
 (0)