11package fr .insee .genesis .domain .service .surveyunit ;
22
3- import fr .insee .genesis .controller .dto .CampaignWithQuestionnaire ;
4- import fr .insee .genesis .controller .dto .QuestionnaireWithCampaign ;
5- import fr .insee .genesis .controller .dto .SurveyUnitDto ;
6- import fr .insee .genesis .controller .dto .SurveyUnitId ;
7- import fr .insee .genesis .controller .dto .VariableDto ;
8- import fr .insee .genesis .controller .dto .VariableStateDto ;
9- import fr .insee .genesis .domain .model .surveyunit .CollectedVariable ;
10- import fr .insee .genesis .domain .model .surveyunit .Mode ;
11- import fr .insee .genesis .domain .model .surveyunit .SurveyUnitModel ;
12- import fr .insee .genesis .domain .model .surveyunit .Variable ;
3+ import fr .insee .genesis .controller .dto .*;
4+ import fr .insee .genesis .domain .model .surveyunit .*;
135import fr .insee .genesis .domain .ports .api .SurveyUnitApiPort ;
146import fr .insee .genesis .domain .ports .spi .SurveyUnitPersistencePort ;
157import org .springframework .beans .factory .annotation .Autowired ;
168import org .springframework .beans .factory .annotation .Qualifier ;
179import org .springframework .stereotype .Service ;
1810
1911import java .time .LocalDateTime ;
20- import java .util .ArrayList ;
21- import java .util .HashMap ;
22- import java .util .List ;
23- import java .util .Map ;
24- import java .util .Set ;
12+ import java .util .*;
2513import java .util .stream .Stream ;
2614
2715@ Service
@@ -77,7 +65,7 @@ public List<SurveyUnitModel> findLatestByIdAndByIdQuestionnaire(String idUE, Str
7765 //We had all the variables of the oldest update
7866 latestUpdatesbyVariables .add (suByMode .getFirst ());
7967 //We keep the name of already added variables to skip them in older updates
80- List <String > addedVariables = new ArrayList <>();
68+ List <IdLoopTuple > addedVariables = new ArrayList <>();
8169 SurveyUnitModel latestUpdate = suByMode .getFirst ();
8270
8371 if (latestUpdate .getCollectedVariables () == null ){
@@ -86,33 +74,33 @@ public List<SurveyUnitModel> findLatestByIdAndByIdQuestionnaire(String idUE, Str
8674 if (latestUpdate .getExternalVariables () == null ){
8775 latestUpdate .setExternalVariables (new ArrayList <>());
8876 }
89- latestUpdate .getCollectedVariables ().forEach (variableStateDto -> addedVariables .add (variableStateDto .getIdVar ()));
90- latestUpdate .getExternalVariables ().forEach (externalVariableDto -> addedVariables .add (externalVariableDto .getIdVar ()));
77+ latestUpdate .getCollectedVariables ().forEach (colVar -> addedVariables .add (new IdLoopTuple ( colVar .getIdVar (), colVar . getIdLoop () )));
78+ latestUpdate .getExternalVariables ().forEach (extVar -> addedVariables .add (new IdLoopTuple ( extVar .getIdVar (), "" )));
9179
92- suByMode .forEach (surveyUnitDto -> {
80+ suByMode .forEach (surveyUnitModel -> {
9381 List <CollectedVariable > variablesToKeep = new ArrayList <>();
9482 List <Variable > externalToKeep = new ArrayList <>();
9583 // We iterate over the variables of the update and add them to the list if they are not already added
96- surveyUnitDto .getCollectedVariables ().stream ()
97- .filter (variableStateDto -> !addedVariables .contains (variableStateDto .getIdVar ()))
98- .forEach (variableStateDto -> {
99- variablesToKeep .add (variableStateDto );
100- addedVariables .add (variableStateDto .getIdVar ());
84+ surveyUnitModel .getCollectedVariables ().stream ()
85+ .filter (colVar -> !addedVariables .contains (new IdLoopTuple ( colVar .getIdVar (), colVar . getIdLoop () )))
86+ .forEach (colVar -> {
87+ variablesToKeep .add (colVar );
88+ addedVariables .add (new IdLoopTuple ( colVar .getIdVar (), colVar . getIdLoop () ));
10189 });
102- if (surveyUnitDto .getExternalVariables () != null ){
103- surveyUnitDto .getExternalVariables ().stream ()
104- .filter (externalVariableDto -> !addedVariables .contains (externalVariableDto .getIdVar ()))
105- .forEach (externalVariableDto -> {
106- externalToKeep .add (externalVariableDto );
107- addedVariables .add (externalVariableDto .getIdVar ());
90+ if (surveyUnitModel .getExternalVariables () != null ){
91+ surveyUnitModel .getExternalVariables ().stream ()
92+ .filter (extVar -> !addedVariables .contains (new IdLoopTuple ( extVar .getIdVar (), "" )))
93+ .forEach (extVar -> {
94+ externalToKeep .add (extVar );
95+ addedVariables .add (new IdLoopTuple ( extVar .getIdVar (), "" ));
10896 });
10997 }
11098
11199 // If there are new variables, we add the update to the list of latest updates
112100 if (!variablesToKeep .isEmpty () || !externalToKeep .isEmpty ()){
113- surveyUnitDto .setCollectedVariables (variablesToKeep );
114- surveyUnitDto .setExternalVariables (externalToKeep );
115- latestUpdatesbyVariables .add (surveyUnitDto );
101+ surveyUnitModel .setCollectedVariables (variablesToKeep );
102+ surveyUnitModel .setExternalVariables (externalToKeep );
103+ latestUpdatesbyVariables .add (surveyUnitModel );
116104 }
117105 });
118106 });
@@ -128,7 +116,7 @@ public SurveyUnitDto findLatestValuesByStateByIdAndByIdQuestionnaire(String idUE
128116 .build ();
129117
130118 //Extract variables
131- Map <String , VariableDto > collectedVariableMap = new HashMap <>();
119+ Map <IdLoopTuple , VariableDto > collectedVariableMap = new HashMap <>();
132120 Map <String , VariableDto > externalVariableMap = new HashMap <>();
133121 List <SurveyUnitModel > surveyUnitModels = surveyUnitPersistencePort .findByIds (idUE , idQuest );
134122 List <Mode > modes = getDistinctsModes (surveyUnitModels );
@@ -139,7 +127,7 @@ public SurveyUnitDto findLatestValuesByStateByIdAndByIdQuestionnaire(String idUE
139127 .toList ();
140128 suByMode .forEach (surveyUnitModel -> extractVariables (surveyUnitModel , collectedVariableMap ,externalVariableMap ));
141129 });
142- collectedVariableMap .keySet ().forEach (variableName -> surveyUnitDto .getCollectedVariables ().add (collectedVariableMap .get (variableName )));
130+ collectedVariableMap .keySet ().forEach (variableTuple -> surveyUnitDto .getCollectedVariables ().add (collectedVariableMap .get (variableTuple )));
143131 externalVariableMap .keySet ().forEach (variableName -> surveyUnitDto .getExternalVariables ().add (externalVariableMap .get (variableName )));
144132 return surveyUnitDto ;
145133 }
@@ -241,22 +229,24 @@ private static List<Mode> getDistinctsModes(List<SurveyUnitModel> surveyUnitMode
241229 * @param externalVariableMap External variable DTO map to populate
242230 */
243231 private void extractVariables (SurveyUnitModel surveyUnitModel ,
244- Map <String , VariableDto > collectedVariableMap ,
232+ Map <IdLoopTuple , VariableDto > collectedVariableMap ,
245233 Map <String , VariableDto > externalVariableMap ) {
246234
247235 if (surveyUnitModel .getCollectedVariables () == null ){
248236 surveyUnitModel .setCollectedVariables (new ArrayList <>());
249237 }
250238 for (CollectedVariable collectedVariable : surveyUnitModel .getCollectedVariables ()) {
251- VariableDto variableDto = collectedVariableMap .get (collectedVariable .getIdVar ());
239+ IdLoopTuple idLoopTuple = new IdLoopTuple (collectedVariable .getIdVar (), collectedVariable .getIdLoop ());
240+ VariableDto variableDto = collectedVariableMap .get (idLoopTuple );
252241
253242 //Create variable into map if not exists
254243 if (variableDto == null ) {
255244 variableDto = VariableDto .builder ()
256245 .variableName (collectedVariable .getIdVar ())
246+ .idLoop (collectedVariable .getIdLoop ())
257247 .variableStateDtoList (new ArrayList <>())
258248 .build ();
259- collectedVariableMap .put (collectedVariable . getIdVar () , variableDto );
249+ collectedVariableMap .put (idLoopTuple , variableDto );
260250 }
261251 //Extract variable state
262252 if (!collectedVariable .getValues ().isEmpty () && isMostRecentForSameState (surveyUnitModel , variableDto )) {
0 commit comments