-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathContextualVariableController.java
More file actions
146 lines (124 loc) · 6.79 KB
/
Copy pathContextualVariableController.java
File metadata and controls
146 lines (124 loc) · 6.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package fr.insee.genesis.controller.rest.responses;
import fr.insee.genesis.Constants;
import fr.insee.genesis.configuration.Config;
import fr.insee.genesis.controller.dto.SaveContextualVariablesReportDto;
import fr.insee.genesis.domain.model.surveyunit.Mode;
import fr.insee.genesis.domain.ports.api.ContextualExternalVariableApiPort;
import fr.insee.genesis.domain.ports.api.ContextualPreviousVariableApiPort;
import fr.insee.genesis.domain.ports.api.ContextualVariableApiPort;
import fr.insee.genesis.exceptions.GenesisException;
import fr.insee.genesis.infrastructure.utils.FileUtils;
import io.swagger.v3.oas.annotations.Operation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.io.IOException;
import java.nio.file.Path;
@RequestMapping(path = "/contextual-variables")
@Controller
@Slf4j
@AllArgsConstructor
public class ContextualVariableController {
private final ContextualPreviousVariableApiPort contextualPreviousVariableApiPort;
private final ContextualExternalVariableApiPort contextualExternalVariableApiPort;
private final ContextualVariableApiPort contextualVariableApiPort;
private final Config config;
@Operation(summary = "Get contextual variables (external and previous)")
@GetMapping(path = "/")
@PreAuthorize("hasAnyRole('USER_PLATINE','SCHEDULER')")
public ResponseEntity<Object> getContextualVariables(
@RequestParam("questionnaireId") String questionnaireId,
@RequestParam("interrogationId") String interrogationId
){
return ResponseEntity.ok().body(
contextualVariableApiPort.getContextualVariable(questionnaireId, interrogationId)
);
}
@Operation(summary = "Save all contextual variables json files (external and previous)")
@PostMapping(path = "/json")
@PreAuthorize("hasAnyRole('USER_PLATINE','SCHEDULER')")
public ResponseEntity<Object> saveContextualVariables(
@RequestParam("questionnaireId") String questionnaireId
) throws GenesisException{
FileUtils fileUtils = new FileUtils(config);
String contextualFolderPath = fileUtils.getDataFolder(questionnaireId, "WEB", null) + Constants.CONTEXTUAL_FOLDER;
int fileCount = contextualVariableApiPort.saveContextualVariableFiles(questionnaireId, fileUtils,contextualFolderPath);
return ResponseEntity.ok("%d file(s) processed for questionnaire %s !".formatted(fileCount, questionnaireId));
}
@Operation(summary = "Save all contextual variables json files and return processed file details")
@PostMapping(path = "/json/report")
@PreAuthorize("hasAnyRole('USER_PLATINE','SCHEDULER')")
public ResponseEntity<SaveContextualVariablesReportDto> saveContextualVariablesWithReport(
@RequestParam("questionnaireId") String questionnaireId
) throws GenesisException {
FileUtils fileUtils = new FileUtils(config);
String contextualFolderPath =
fileUtils.getDataFolder(questionnaireId, "WEB", null) + Constants.CONTEXTUAL_FOLDER;
SaveContextualVariablesReportDto report =
contextualVariableApiPort.saveContextualVariableFilesWithReport(
questionnaireId,
fileUtils,
contextualFolderPath
);
return ResponseEntity.ok(report);
}
@Operation(summary = "Add contextual previous json file")
@PostMapping(path = "previous/json")
@PreAuthorize("hasAnyRole('USER_PLATINE','SCHEDULER','USER_BACK_OFFICE')")
public ResponseEntity<Object> readContextualPreviousJson(
@RequestParam("questionnaireId") String questionnaireId,
@RequestParam("mode") Mode mode,
@RequestParam(value = "sourceState", required = false) String sourceState,
@RequestParam(value = "jsonFileName") String jsonFileName
) throws GenesisException{
FileUtils fileUtils = new FileUtils(config);
fileUtils.ensureContextualFolderExists(questionnaireId, mode);
String filePath = "%s%s/%s".formatted(
fileUtils.getDataFolder(questionnaireId, mode.getFolder(), null),
Constants.CONTEXTUAL_FOLDER,
jsonFileName
);
if (!jsonFileName.toLowerCase().endsWith(".json")) {
throw new GenesisException(HttpStatus.BAD_REQUEST, "File must be a JSON file !");
}
contextualPreviousVariableApiPort.readContextualPreviousFile(questionnaireId.toUpperCase(), sourceState, filePath);
moveFile(questionnaireId, mode, fileUtils, filePath);
return ResponseEntity.ok("Contextual previous variable file %s saved !".formatted(filePath));
}
@Operation(summary = "Add contextual external json file")
@PostMapping(path = "/external/json")
@PreAuthorize("hasAnyRole('USER_PLATINE','SCHEDULER','USER_BACK_OFFICE')")
public ResponseEntity<Object> readContextualExternalJson(
@RequestParam("questionnaireId") String questionnaireId,
@RequestParam("mode") Mode mode,
@RequestParam(value = "jsonFileName") String jsonFileName
) throws GenesisException{
FileUtils fileUtils = new FileUtils(config);
fileUtils.ensureContextualFolderExists(questionnaireId, mode);
String filePath = "%s%s/%s".formatted(
fileUtils.getDataFolder(questionnaireId, mode.getFolder(), null),
Constants.CONTEXTUAL_FOLDER,
jsonFileName
);
if (!jsonFileName.toLowerCase().endsWith(".json")) {
throw new GenesisException(HttpStatus.BAD_REQUEST, "File must be a JSON file !");
}
contextualExternalVariableApiPort.readContextualExternalFile(questionnaireId, filePath);
moveFile(questionnaireId, mode, fileUtils, filePath);
return ResponseEntity.ok("Contextual external variable file %s saved !".formatted(filePath));
}
private static void moveFile(String questionnaireId, Mode mode, FileUtils fileUtils, String filePath) throws GenesisException {
try {
fileUtils.moveFiles(Path.of(filePath), fileUtils.getDoneFolder(questionnaireId, mode.getFolder()));
} catch (IOException _) {
throw new GenesisException(HttpStatus.INTERNAL_SERVER_ERROR, "Error while moving file to done");
}
}
}