Skip to content

Commit 73874a0

Browse files
Merge pull request #205 from InseeFr/mergeRawProcessAndLunaticModel
Raw process
2 parents 2d08e6f + fe53d2c commit 73874a0

26 files changed

+521
-460
lines changed

src/main/java/fr/insee/genesis/configuration/LogRequestFilter.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.springframework.web.util.ContentCachingResponseWrapper;
1414

1515
import java.io.IOException;
16-
import java.nio.charset.StandardCharsets;
1716

1817

1918
@Component
@@ -24,8 +23,6 @@ public class LogRequestFilter extends OncePerRequestFilter {
2423

2524
private static final String REQUEST_MESSAGE_FORMAT =
2625
"CALL {} {} - "
27-
// + "Content-Type : {} \n "
28-
// + "Headers : {} \n "
2926
+ "Params : {}";
3027

3128
private static final String RESPONSE_MESSAGE_FORMAT =
@@ -59,9 +56,4 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
5956
resp.copyBodyToResponse();
6057
}
6158

62-
private String getResponseBody(ContentCachingRequestWrapper req, ContentCachingResponseWrapper resp) {
63-
if (req.getRequestURI().contains("swagger-ui") ||req.getRequestURI().contains("api-docs")) return "Hidden Swagger response";
64-
return new String(resp.getContentAsByteArray(), StandardCharsets.UTF_8);
65-
}
66-
6759
}

src/main/java/fr/insee/genesis/configuration/auth/security/OIDCSecurityConfig.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.springframework.security.oauth2.jwt.Jwt;
2121
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
2222
import org.springframework.security.web.SecurityFilterChain;
23-
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
2423
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
2524

2625
import java.util.Collection;
Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
11
package fr.insee.genesis.controller.dto;
22

33
import lombok.AllArgsConstructor;
4-
import lombok.Getter;
54
import lombok.NoArgsConstructor;
6-
import lombok.Setter;
75

86
import java.util.Objects;
97

10-
@Setter
11-
@Getter
128
@NoArgsConstructor
139
@AllArgsConstructor
1410
public class InterrogationId {
1511

16-
private String interrogationId;
12+
private String identifier;
1713

1814
@Override
1915
public boolean equals(Object o) {
2016
if (this == o) return true;
2117
if (o == null || getClass() != o.getClass()) return false;
2218
InterrogationId that = (InterrogationId) o;
23-
return Objects.equals(interrogationId, that.interrogationId);
19+
return Objects.equals(identifier, that.identifier);
2420
}
2521

2622
@Override
2723
public int hashCode() {
28-
return Objects.hash(interrogationId);
24+
return Objects.hash(identifier);
25+
}
26+
27+
public String getInterrogationId() {
28+
return identifier;
29+
}
30+
31+
public void setInterrogationId(String identifier) {
32+
this.identifier = identifier;
2933
}
3034
}

src/main/java/fr/insee/genesis/controller/dto/rawdata/LunaticJsonRawDataUnprocessedDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
import lombok.Builder;
44

55
@Builder
6-
public record LunaticJsonRawDataUnprocessedDto(String campaignId, String interrogationId){}
6+
public record LunaticJsonRawDataUnprocessedDto(String campaignId, String questionnaireId, String interrogationId){}

src/main/java/fr/insee/genesis/controller/rest/UtilsController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.springframework.web.bind.annotation.RequestMapping;
1515
import org.springframework.web.bind.annotation.RequestParam;
1616

17+
import javax.xml.stream.XMLStreamException;
1718
import java.io.IOException;
1819

1920
@RequestMapping(path = "/")
@@ -43,7 +44,7 @@ public ResponseEntity<Object> saveResponsesFromXmlFile(@RequestParam("inputFolde
4344
@RequestParam("outputFolder") String outputFolder,
4445
@RequestParam("filename") String filename,
4546
@RequestParam("nbResponsesByFile") int nbSU)
46-
throws Exception {
47+
throws XMLStreamException, IOException {
4748
XMLSplitter.split(inputFolder, filename, outputFolder, "SurveyUnit", nbSU);
4849
return ResponseEntity.ok("File split");
4950
}
Lines changed: 25 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,36 @@
11
package fr.insee.genesis.controller.rest.responses;
22

3+
import fr.insee.bpm.metadata.model.VariablesMap;
34
import fr.insee.genesis.controller.dto.rawdata.LunaticJsonRawDataUnprocessedDto;
5+
import fr.insee.genesis.controller.services.MetadataService;
6+
import fr.insee.genesis.controller.utils.ControllerUtils;
7+
import fr.insee.genesis.domain.model.surveyunit.DataState;
48
import fr.insee.genesis.domain.model.surveyunit.Mode;
9+
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
10+
import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult;
511
import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel;
12+
import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort;
613
import fr.insee.genesis.domain.service.rawdata.LunaticJsonRawDataService;
14+
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitQualityService;
15+
import fr.insee.genesis.domain.service.surveyunit.SurveyUnitService;
16+
import fr.insee.genesis.exceptions.GenesisError;
17+
import fr.insee.genesis.exceptions.GenesisException;
18+
import fr.insee.genesis.infrastructure.utils.FileUtils;
719
import io.swagger.v3.oas.annotations.Hidden;
820
import io.swagger.v3.oas.annotations.Operation;
921
import lombok.extern.slf4j.Slf4j;
1022
import org.springframework.http.ResponseEntity;
1123
import org.springframework.security.access.prepost.PreAuthorize;
1224
import org.springframework.stereotype.Controller;
1325
import org.springframework.web.bind.annotation.GetMapping;
26+
import org.springframework.web.bind.annotation.PostMapping;
1427
import org.springframework.web.bind.annotation.PutMapping;
1528
import org.springframework.web.bind.annotation.RequestBody;
1629
import org.springframework.web.bind.annotation.RequestMapping;
1730
import org.springframework.web.bind.annotation.RequestParam;
1831

1932
import java.time.LocalDateTime;
33+
import java.util.ArrayList;
2034
import java.util.List;
2135
import java.util.Map;
2236

@@ -26,23 +40,9 @@
2640
public class RawResponseController {
2741

2842
private static final String SUCCESS_MESSAGE = "Interrogation %s saved";
29-
private final LunaticJsonRawDataService lunaticJsonRawDataApiPort;
30-
// private final ControllerUtils controllerUtils;
31-
// private final MetadataService metadataService;
32-
// private final SurveyUnitService surveyUnitService;
33-
// private final SurveyUnitQualityService surveyUnitQualityService;
34-
// private final FileUtils fileUtils;
43+
private final LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort;
3544

36-
/* public RawResponseController(LunaticJsonRawDataService lunaticJsonRawDataApiPort, ControllerUtils controllerUtils, MetadataService metadataService, SurveyUnitService surveyUnitService, SurveyUnitQualityService surveyUnitQualityService, FileUtils fileUtils) {
37-
this.lunaticJsonRawDataApiPort = lunaticJsonRawDataApiPort;
38-
this.controllerUtils = controllerUtils;
39-
this.metadataService = metadataService;
40-
this.surveyUnitService = surveyUnitService;
41-
this.surveyUnitQualityService = surveyUnitQualityService;
42-
this.fileUtils = fileUtils;
43-
}*/
44-
45-
public RawResponseController(LunaticJsonRawDataService lunaticJsonRawDataApiPort) {
45+
public RawResponseController(LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort) {
4646
this.lunaticJsonRawDataApiPort = lunaticJsonRawDataApiPort;
4747
}
4848

@@ -100,63 +100,26 @@ public ResponseEntity<LunaticJsonRawDataModel> getJsonRawData(
100100
}
101101

102102
//PROCESS
103-
/* @Operation(summary = "Process raw data of a campaign")
103+
@Operation(summary = "Process raw data of a campaign")
104104
@PostMapping(path = "/lunatic-json/process")
105-
@PreAuthorize("hasRole('ADMIN')")
105+
@PreAuthorize("hasRole('SCHEDULER')")
106106
public ResponseEntity<Object> processJsonRawData(
107107
@RequestParam("campaignName") String campaignName,
108108
@RequestParam("questionnaireId") String questionnaireId,
109109
@RequestBody List<String> interrogationIdList
110110
){
111111
log.info("Try to process raw JSON datas for campaign {} and {} interrogationIds", campaignName, interrogationIdList.size());
112-
113-
int dataCount = 0;
114-
int forcedDataCount = 0;
115112
List<GenesisError> errors = new ArrayList<>();
116113

117114
try {
118-
List<Mode> modesList = controllerUtils.getModesList(campaignName, null);
119-
for (Mode mode : modesList) {
120-
//Load and save metadatas into database, throw exception if none
121-
VariablesMap variablesMap = metadataService.readMetadatas(campaignName, mode.getModeName(), fileUtils,
122-
errors);
123-
if (variablesMap == null) {
124-
throw new GenesisException(400,
125-
"Error during metadata parsing for mode %s :%n%s"
126-
.formatted(mode, errors.getLast().getMessage())
127-
);
128-
}
129-
130-
List<LunaticJsonRawDataModel> rawData = lunaticJsonRawDataApiPort.getRawData(campaignName,mode,interrogationIdList);
131-
//Save converted data
132-
List<SurveyUnitModel> surveyUnitModels = lunaticJsonRawDataApiPort.convertRawData(
133-
rawData,
134-
variablesMap
135-
);
136-
137-
surveyUnitQualityService.verifySurveyUnits(surveyUnitModels, variablesMap);
138-
surveyUnitService.saveSurveyUnits(surveyUnitModels);
139-
140-
//Update process dates
141-
lunaticJsonRawDataApiPort.updateProcessDates(surveyUnitModels);
142-
143-
//Save metadatas
144-
//TODO Enable when mapping problem solved for get metadatas step
145-
//variableTypeApiPort.saveMetadatas(campaignName, questionnaireId, mode, variablesMap);
146-
147-
//Increment data count
148-
dataCount += surveyUnitModels.size();
149-
forcedDataCount += surveyUnitModels.stream().filter(
150-
surveyUnitModel -> surveyUnitModel.getState().equals(DataState.FORCED)
151-
).toList().size();
152-
}
153-
return forcedDataCount == 0 ?
154-
ResponseEntity.ok("%d document(s) processed".formatted(dataCount))
155-
: ResponseEntity.ok("%d document(s) processed, including %d FORCED after data verification"
156-
.formatted(dataCount, forcedDataCount));
157-
}catch (GenesisException e){ //TODO replace with spring exception handler
115+
DataProcessResult result = lunaticJsonRawDataApiPort.processRawData(campaignName, interrogationIdList, errors);
116+
return result.formattedDataCount() == 0 ?
117+
ResponseEntity.ok("%d document(s) processed".formatted(result.dataCount()))
118+
: ResponseEntity.ok("%d document(s) processed, including %d FORMATTED after data verification"
119+
.formatted(result.dataCount(), result.formattedDataCount()));
120+
}catch (GenesisException e){
158121
return ResponseEntity.status(e.getStatus()).body(e.getMessage());
159122
}
160123
}
161-
*/
124+
162125
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package fr.insee.genesis.domain.model.surveyunit.rawdata;
2+
3+
public record DataProcessResult(int dataCount, int formattedDataCount) {
4+
}

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
import fr.insee.genesis.controller.dto.rawdata.LunaticJsonRawDataUnprocessedDto;
55
import fr.insee.genesis.domain.model.surveyunit.Mode;
66
import fr.insee.genesis.domain.model.surveyunit.SurveyUnitModel;
7+
import fr.insee.genesis.domain.model.surveyunit.rawdata.DataProcessResult;
78
import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel;
9+
import fr.insee.genesis.exceptions.GenesisError;
10+
import fr.insee.genesis.exceptions.GenesisException;
811

912
import java.util.List;
1013
import java.util.Set;
@@ -15,13 +18,9 @@ public interface LunaticJsonRawDataApiPort {
1518
List<LunaticJsonRawDataModel> getRawData(String campaignName, Mode mode, List<String> interrogationIdList);
1619
List<SurveyUnitModel> convertRawData(List<LunaticJsonRawDataModel> rawData, VariablesMap variablesMap);
1720
List<LunaticJsonRawDataUnprocessedDto> getUnprocessedDataIds();
18-
List<SurveyUnitModel> parseRawData(
19-
String campaignName,
20-
Mode mode,
21-
List<String> interrogationIdList,
22-
VariablesMap variablesMap
23-
);
2421
void updateProcessDates(List<SurveyUnitModel> surveyUnitModels);
2522
Set<String> findDistinctQuestionnaireIds();
2623
long countResponsesByQuestionnaireId(String campaignId);
24+
25+
DataProcessResult processRawData(String campaignName, List<String> interrogationIdList, List<GenesisError> errors) throws GenesisException;
2726
}

0 commit comments

Comments
 (0)