Skip to content

Commit e1fdb10

Browse files
committed
Refactor : use different Dtos to import changes in Genesis
1 parent c5e5419 commit e1fdb10

File tree

8 files changed

+172
-175
lines changed

8 files changed

+172
-175
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package fr.insee.genesis.controller.dto;
2+
3+
import fr.insee.genesis.domain.model.surveyunit.Mode;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
7+
import java.util.List;
8+
9+
@Builder
10+
@Data
11+
public class SurveyUnitInputDto {
12+
13+
private String surveyUnitId;
14+
private String campaignId;
15+
private Mode mode;
16+
private String idQuestionnaire;
17+
private List<VariableInputDto> collectedVariables;
18+
19+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package fr.insee.genesis.controller.dto;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
7+
import java.util.List;
8+
9+
@Builder
10+
@Data
11+
public class VariableInputDto {
12+
private String variableName;
13+
private String idLoop;
14+
15+
@JsonProperty("newVariableState")
16+
private VariableStateInputDto variableStateInputDto;
17+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package fr.insee.genesis.controller.dto;
2+
3+
import fr.insee.genesis.domain.model.surveyunit.DataState;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
7+
@Builder
8+
@Data
9+
public class VariableStateInputDto {
10+
11+
private DataState state;
12+
13+
private String value;
14+
15+
}

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

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import fr.insee.genesis.controller.adapter.LunaticXmlAdapter;
1010
import fr.insee.genesis.controller.dto.SurveyUnitDto;
1111
import fr.insee.genesis.controller.dto.SurveyUnitId;
12+
import fr.insee.genesis.controller.dto.SurveyUnitInputDto;
1213
import fr.insee.genesis.controller.dto.SurveyUnitSimplified;
1314
import fr.insee.genesis.controller.sources.xml.LunaticXmlCampaign;
1415
import fr.insee.genesis.controller.sources.xml.LunaticXmlDataParser;
@@ -370,34 +371,29 @@ public ResponseEntity<List<SurveyUnitSimplified>> getLatestForUEList(@RequestPar
370371
description = "Save edited variables document into database")
371372
@PostMapping(path = "/save-edited")
372373
public ResponseEntity<Object> saveEditedVariables(
373-
@RequestParam("campaignId") String campaignId,
374-
@RequestParam("mode") Mode mode,
375-
@RequestParam("idQuestionnaire") String idQuestionnaire,
376-
@RequestBody SurveyUnitDto surveyUnitDto
374+
@RequestBody SurveyUnitInputDto surveyUnitInputDto
377375
){
378376
//Parse metadata
379377
//Try to look for DDI first, if no DDI found looks for lunatic components
380378
List<GenesisError> errors = new ArrayList<>();
381-
VariablesMap variablesMap = readMetadatas(campaignId, mode, errors, true);
379+
VariablesMap variablesMap = readMetadatas(surveyUnitInputDto.getCampaignId(), surveyUnitInputDto.getMode(), errors, true);
382380
if(variablesMap == null){
383381
log.warn("Can't find DDI, trying with lunatic...");
384-
variablesMap = readMetadatas(campaignId, mode, errors, false);
382+
variablesMap = readMetadatas(surveyUnitInputDto.getCampaignId(), surveyUnitInputDto.getMode(), errors, false);
385383
if(variablesMap == null){
386384
return ResponseEntity.status(404).body(errors.getLast().getMessage());
387385
}
388386
}
389387

390388
//Check if input edited variables are in metadatas
391389
List<String> absentCollectedVariableNames =
392-
surveyUnitQualityService.checkVariablesPresentInMetadata(surveyUnitDto.getCollectedVariables(),
390+
surveyUnitQualityService.checkVariablesPresentInMetadata(surveyUnitInputDto.getCollectedVariables(),
393391
variablesMap);
394-
List<String> absentExternalVariableNames =
395-
surveyUnitQualityService.checkVariablesPresentInMetadata(surveyUnitDto.getExternalVariables(),
396-
variablesMap);
397-
if (!absentCollectedVariableNames.isEmpty() || !absentExternalVariableNames.isEmpty()) {
398-
String absentVariables =
399-
Stream.concat(absentCollectedVariableNames.stream(),absentExternalVariableNames.stream())
400-
.collect(Collectors.joining("\n"));
392+
// List<String> absentExternalVariableNames =
393+
// surveyUnitQualityService.checkVariablesPresentInMetadata(surveyUnitInputDto.getExternalVariables(),
394+
// variablesMap);
395+
if (!absentCollectedVariableNames.isEmpty()) {
396+
String absentVariables = String.join("\n", absentCollectedVariableNames);
401397
return ResponseEntity.badRequest().body(
402398
String.format("The following variables are absent in metadatas : %n%s", absentVariables)
403399
);
@@ -407,25 +403,19 @@ public ResponseEntity<Object> saveEditedVariables(
407403
String userIdentifier = authUtils.getIDEP();
408404

409405

410-
//Create EDITED surveyUnitModel
411-
SurveyUnitModel surveyUnitModel;
406+
//Create surveyUnitModel for each STATE received (Quality tool could send variables with another STATE than EDITED)
407+
List<SurveyUnitModel> surveyUnitModels;
412408
try{
413-
surveyUnitModel = surveyUnitService.parseEditedVariables(
414-
campaignId,
415-
mode,
416-
idQuestionnaire,
417-
surveyUnitDto,
409+
surveyUnitModels = surveyUnitService.parseEditedVariables(
410+
surveyUnitInputDto,
418411
userIdentifier,
419412
variablesMap
420413
);
421414
}catch (GenesisException e){
422415
return ResponseEntity.status(e.getStatus()).body(e.getMessage());
423416
}
424417

425-
426418
//Check data with dataverifier (might create a FORCED document)
427-
List<SurveyUnitModel> surveyUnitModels = new ArrayList<>();
428-
surveyUnitModels.add(surveyUnitModel);
429419
surveyUnitQualityService.verifySurveyUnits(surveyUnitModels, variablesMap);
430420

431421
//Save documents

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import fr.insee.bpm.metadata.model.VariablesMap;
44
import fr.insee.genesis.controller.dto.CampaignWithQuestionnaire;
55
import fr.insee.genesis.controller.dto.SurveyUnitDto;
6-
import fr.insee.genesis.controller.dto.VariableDto;
6+
import fr.insee.genesis.controller.dto.SurveyUnitInputDto;
77
import fr.insee.genesis.domain.model.surveyunit.Mode;
88
import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign;
99
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
@@ -52,10 +52,7 @@ public interface SurveyUnitApiPort {
5252

5353
List<QuestionnaireWithCampaign> findQuestionnairesWithCampaigns();
5454

55-
SurveyUnitModel parseEditedVariables(String campaignId,
56-
Mode mode,
57-
String idQuestionnaire,
58-
SurveyUnitDto surveyUnitDto,
55+
List<SurveyUnitModel> parseEditedVariables(SurveyUnitInputDto surveyUnitInputDto,
5956
String userIdentifier,
6057
VariablesMap variablesMap) throws GenesisException;
6158
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fr.insee.genesis.domain.service.surveyunit;
22

33
import fr.insee.genesis.controller.dto.VariableDto;
4+
import fr.insee.genesis.controller.dto.VariableInputDto;
45
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
56
import fr.insee.genesis.domain.utils.DataVerifier;
67
import fr.insee.bpm.metadata.model.VariablesMap;
@@ -20,16 +21,16 @@ public void verifySurveyUnits(List<SurveyUnitModel> surveyUnitModels, VariablesM
2021

2122
/**
2223
* Checks
23-
* @param variableDtos input variables to check
24+
* @param variableInputDtos input variables to check
2425
* @param variablesMap BPM Questionnaire metadata to use for checking
2526
* @return A list of variables that are <strong>absent</strong> in metadata
2627
*/
27-
public List<String> checkVariablesPresentInMetadata(List<VariableDto> variableDtos, VariablesMap variablesMap) {
28+
public List<String> checkVariablesPresentInMetadata(List<VariableInputDto> variableInputDtos, VariablesMap variablesMap) {
2829
List<String> absentVariableNames = new ArrayList<>();
2930

30-
for(VariableDto variableDto : variableDtos){
31-
if(!variablesMap.hasVariable(variableDto.getVariableName())){
32-
absentVariableNames.add(variableDto.getVariableName());
31+
for(VariableInputDto variableInputDto : variableInputDtos){
32+
if(!variablesMap.hasVariable(variableInputDto.getVariableName())){
33+
absentVariableNames.add(variableInputDto.getVariableName());
3334
}
3435
}
3536

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

Lines changed: 41 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import fr.insee.genesis.controller.dto.QuestionnaireWithCampaign;
66
import fr.insee.genesis.controller.dto.SurveyUnitDto;
77
import fr.insee.genesis.controller.dto.SurveyUnitId;
8+
import fr.insee.genesis.controller.dto.SurveyUnitInputDto;
89
import fr.insee.genesis.controller.dto.VariableDto;
10+
import fr.insee.genesis.controller.dto.VariableInputDto;
911
import fr.insee.genesis.controller.dto.VariableStateDto;
1012
import fr.insee.genesis.domain.model.surveyunit.CollectedVariable;
1113
import fr.insee.genesis.domain.model.surveyunit.DataState;
@@ -234,75 +236,58 @@ public List<QuestionnaireWithCampaign> findQuestionnairesWithCampaigns() {
234236
}
235237

236238
@Override
237-
public SurveyUnitModel parseEditedVariables(
238-
String campaignId,
239-
Mode mode,
240-
String idQuestionnaire,
241-
SurveyUnitDto surveyUnitDto,
239+
public List<SurveyUnitModel> parseEditedVariables(
240+
SurveyUnitInputDto surveyUnitInputDto,
242241
String userIdentifier,
243242
VariablesMap variablesMap
244243
) throws GenesisException {
245-
SurveyUnitModel surveyUnitModel = SurveyUnitModel.builder()
246-
.idCampaign(campaignId)
247-
.mode(mode)
248-
.idQuest(idQuestionnaire)
249-
.idUE(surveyUnitDto.getSurveyUnitId())
250-
.state(DataState.EDITED)
251-
.recordDate(LocalDateTime.now())
252-
.collectedVariables(new ArrayList<>())
253-
.externalVariables(new ArrayList<>())
254-
.modifiedBy(userIdentifier)
255-
.build();
256244

257-
//Keep only variable dtos who has at least one EDITED variableStateDto
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(
265-
variableDto -> !variableDto.getVariableStateDtoList().stream().filter(
266-
variableStateDto -> variableStateDto.getState().equals(DataState.EDITED)
267-
).toList().isEmpty()
268-
).toList();
269-
270-
//Error 400 bad request if no edited variable in list
271-
if(editedCollectedVariables.isEmpty() && editedExternalVariables.isEmpty()){
272-
throw new GenesisException(400, "No EDITED variable in list");
245+
List<DataState> statesReceived = surveyUnitInputDto.getCollectedVariables().stream()
246+
.map(colVar -> colVar.getVariableStateInputDto().getState())
247+
.distinct()
248+
.toList();
249+
250+
if (statesReceived.contains(DataState.COLLECTED)){
251+
throw new GenesisException(400,"You can not persist in database a new value with the state COLLECTED");
273252
}
274253

275-
//Collected variables management
276-
for(VariableDto editedVariableDto : editedCollectedVariables){
277-
CollectedVariable collectedVariable = CollectedVariable.collectedVariableBuilder()
278-
.idVar(editedVariableDto.getVariableName())
279-
.values(new ArrayList<>())
280-
.idParent(LoopIdentifier.getRelatedVariableName(editedVariableDto.getVariableName(), variablesMap))
281-
.idLoop(editedVariableDto.getIdLoop())
254+
List<SurveyUnitModel> surveyUnitModels = new ArrayList<>();
255+
256+
for (DataState state : statesReceived){
257+
SurveyUnitModel surveyUnitModel = SurveyUnitModel.builder()
258+
.idCampaign(surveyUnitInputDto.getCampaignId())
259+
.mode(surveyUnitInputDto.getMode())
260+
.idQuest(surveyUnitInputDto.getIdQuestionnaire())
261+
.idUE(surveyUnitInputDto.getSurveyUnitId())
262+
.state(state)
263+
.recordDate(LocalDateTime.now())
264+
.collectedVariables(new ArrayList<>())
265+
.externalVariables(new ArrayList<>())
266+
.modifiedBy(userIdentifier)
282267
.build();
283268

269+
//Keep only variable dtos who has the corresponding state
270+
List<VariableInputDto> editedCollectedVariables = surveyUnitInputDto.getCollectedVariables().stream()
271+
.filter(colVar -> colVar.getVariableStateInputDto().getState() == state).toList();
272+
273+
//Collected variables management
274+
for(VariableInputDto editedVariableDto : editedCollectedVariables){
275+
CollectedVariable collectedVariable = CollectedVariable.collectedVariableBuilder()
276+
.idVar(editedVariableDto.getVariableName())
277+
.values(new ArrayList<>())
278+
.idParent(LoopIdentifier.getRelatedVariableName(editedVariableDto.getVariableName(), variablesMap))
279+
.idLoop(editedVariableDto.getIdLoop())
280+
.build();
284281

282+
collectedVariable.getValues().add(editedVariableDto.getVariableStateInputDto().getValue());
285283

286-
collectedVariable.getValues().add(editedVariableDto.getVariableStateDtoList().stream().filter(variableStateDto ->
287-
variableStateDto.getState().equals(DataState.EDITED)).toList().getFirst().getValue());
288-
289-
surveyUnitModel.getCollectedVariables().add(collectedVariable);
290-
}
291-
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());
284+
surveyUnitModel.getCollectedVariables().add(collectedVariable);
301285

302-
surveyUnitModel.getExternalVariables().add(externalVariable);
286+
}
287+
surveyUnitModels.add(surveyUnitModel);
303288
}
304289

305-
return surveyUnitModel;
290+
return surveyUnitModels;
306291
}
307292

308293
//Utils

0 commit comments

Comments
 (0)