|
1 | 1 | package fr.insee.genesis.controller.rest.responses; |
2 | 2 |
|
| 3 | +import fr.insee.bpm.metadata.model.VariablesMap; |
3 | 4 | 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; |
4 | 8 | 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; |
5 | 11 | import fr.insee.genesis.domain.model.surveyunit.rawdata.LunaticJsonRawDataModel; |
| 12 | +import fr.insee.genesis.domain.ports.api.LunaticJsonRawDataApiPort; |
6 | 13 | 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; |
7 | 19 | import io.swagger.v3.oas.annotations.Hidden; |
8 | 20 | import io.swagger.v3.oas.annotations.Operation; |
9 | 21 | import lombok.extern.slf4j.Slf4j; |
10 | 22 | import org.springframework.http.ResponseEntity; |
11 | 23 | import org.springframework.security.access.prepost.PreAuthorize; |
12 | 24 | import org.springframework.stereotype.Controller; |
13 | 25 | import org.springframework.web.bind.annotation.GetMapping; |
| 26 | +import org.springframework.web.bind.annotation.PostMapping; |
14 | 27 | import org.springframework.web.bind.annotation.PutMapping; |
15 | 28 | import org.springframework.web.bind.annotation.RequestBody; |
16 | 29 | import org.springframework.web.bind.annotation.RequestMapping; |
17 | 30 | import org.springframework.web.bind.annotation.RequestParam; |
18 | 31 |
|
19 | 32 | import java.time.LocalDateTime; |
| 33 | +import java.util.ArrayList; |
20 | 34 | import java.util.List; |
21 | 35 | import java.util.Map; |
22 | 36 |
|
|
26 | 40 | public class RawResponseController { |
27 | 41 |
|
28 | 42 | 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; |
35 | 44 |
|
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) { |
46 | 46 | this.lunaticJsonRawDataApiPort = lunaticJsonRawDataApiPort; |
47 | 47 | } |
48 | 48 |
|
@@ -100,63 +100,26 @@ public ResponseEntity<LunaticJsonRawDataModel> getJsonRawData( |
100 | 100 | } |
101 | 101 |
|
102 | 102 | //PROCESS |
103 | | - /* @Operation(summary = "Process raw data of a campaign") |
| 103 | + @Operation(summary = "Process raw data of a campaign") |
104 | 104 | @PostMapping(path = "/lunatic-json/process") |
105 | | - @PreAuthorize("hasRole('ADMIN')") |
| 105 | + @PreAuthorize("hasRole('SCHEDULER')") |
106 | 106 | public ResponseEntity<Object> processJsonRawData( |
107 | 107 | @RequestParam("campaignName") String campaignName, |
108 | 108 | @RequestParam("questionnaireId") String questionnaireId, |
109 | 109 | @RequestBody List<String> interrogationIdList |
110 | 110 | ){ |
111 | 111 | log.info("Try to process raw JSON datas for campaign {} and {} interrogationIds", campaignName, interrogationIdList.size()); |
112 | | -
|
113 | | - int dataCount = 0; |
114 | | - int forcedDataCount = 0; |
115 | 112 | List<GenesisError> errors = new ArrayList<>(); |
116 | 113 |
|
117 | 114 | 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){ |
158 | 121 | return ResponseEntity.status(e.getStatus()).body(e.getMessage()); |
159 | 122 | } |
160 | 123 | } |
161 | | -*/ |
| 124 | + |
162 | 125 | } |
0 commit comments