1616import io .swagger .v3 .oas .annotations .Hidden ;
1717import io .swagger .v3 .oas .annotations .Operation ;
1818import lombok .extern .slf4j .Slf4j ;
19+ import org .springframework .data .domain .Page ;
20+ import org .springframework .data .domain .PageRequest ;
21+ import org .springframework .data .domain .Pageable ;
22+ import org .springframework .data .web .PagedModel ;
23+ import org .springframework .format .annotation .DateTimeFormat ;
24+ import org .springframework .http .HttpStatus ;
1925import org .springframework .http .ResponseEntity ;
2026import org .springframework .security .access .prepost .PreAuthorize ;
2127import org .springframework .stereotype .Controller ;
2228import org .springframework .web .bind .annotation .GetMapping ;
29+ import org .springframework .web .bind .annotation .PathVariable ;
2330import org .springframework .web .bind .annotation .PostMapping ;
2431import org .springframework .web .bind .annotation .PutMapping ;
2532import org .springframework .web .bind .annotation .RequestBody ;
2633import org .springframework .web .bind .annotation .RequestMapping ;
2734import org .springframework .web .bind .annotation .RequestParam ;
2835
36+ import java .time .Instant ;
2937import java .time .LocalDateTime ;
3038import java .util .ArrayList ;
31- import java .util .Arrays ;
3239import java .util .List ;
3340import java .util .Map ;
3441import java .util .Set ;
3542import java .util .stream .Collectors ;
3643
3744@ Slf4j
3845@ Controller
39- @ RequestMapping (path = "/responses/raw" )
46+ @ RequestMapping (path = "/responses/raw" )
4047public class RawResponseController {
4148
4249 private static final String SUCCESS_MESSAGE = "Interrogation %s saved" ;
4350 private static final String PARTITION_ID = "partitionId" ;
4451 private static final String INTERROGATION_ID = "interrogationId" ;
4552 private final LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort ;
46-
53+
4754 public RawResponseController (LunaticJsonRawDataApiPort lunaticJsonRawDataApiPort ) {
4855 this .lunaticJsonRawDataApiPort = lunaticJsonRawDataApiPort ;
4956 }
@@ -60,7 +67,7 @@ public ResponseEntity<String> saveRawResponsesFromJsonBody(
6067 @ RequestParam (value = "mode" ) Mode modeSpecified ,
6168 @ RequestBody Map <String , Object > dataJson
6269 ) {
63- log .info ("Try to save interrogationId {} for campaign {}" ,interrogationId ,campaignName );
70+ log .info ("Try to save interrogationId {} for campaign {}" , interrogationId , campaignName );
6471 LunaticJsonRawDataModel rawData = LunaticJsonRawDataModel .builder ()
6572 .campaignId (campaignName )
6673 .questionnaireId (questionnaireId )
@@ -72,12 +79,12 @@ public ResponseEntity<String> saveRawResponsesFromJsonBody(
7279 .build ();
7380 try {
7481 lunaticJsonRawDataApiPort .save (rawData );
75- } catch (Exception e ){
82+ } catch (Exception e ) {
7683 return ResponseEntity .status (500 ).body ("Unexpected error" );
7784 }
78- log .info ("Data saved for interrogationId {} and campaign {}" ,interrogationId , campaignName );
85+ log .info ("Data saved for interrogationId {} and campaign {}" , interrogationId , campaignName );
7986 // Collect platform prefer code 201 in case of success
80- return ResponseEntity .status (201 ).body (String .format (SUCCESS_MESSAGE ,interrogationId ));
87+ return ResponseEntity .status (201 ).body (String .format (SUCCESS_MESSAGE , interrogationId ));
8188 }
8289
8390 @ Operation (summary = "Save lunatic json data from one interrogation in Genesis Database (with json " +
@@ -90,8 +97,8 @@ public ResponseEntity<String> saveRawResponsesFromJsonBodyWithValidation(
9097 JsonSchema jsonSchema = JsonSchemaFactory .getInstance (SpecVersion .VersionFlag .V7 ).getSchema (
9198 RawResponseController .class .getResourceAsStream ("/jsonSchemas/RawResponse.json" )
9299 );
93- try {
94- if (jsonSchema == null ){
100+ try {
101+ if (jsonSchema == null ) {
95102 throw new GenesisException (500 , "No RawResponse json schema has been found" );
96103 }
97104 Set <ValidationMessage > errors = jsonSchema .validate (
@@ -103,9 +110,9 @@ public ResponseEntity<String> saveRawResponsesFromJsonBodyWithValidation(
103110 validate (errors );
104111 //Check required ids
105112 checkRequiredIds (body );
106- }catch (JsonProcessingException jpe ){
113+ } catch (JsonProcessingException jpe ) {
107114 return ResponseEntity .status (400 ).body (jpe .toString ());
108- }catch (GenesisException ge ){
115+ } catch (GenesisException ge ) {
109116 return ResponseEntity .status (ge .getStatus ()).body (ge .getMessage ());
110117 }
111118
@@ -124,29 +131,29 @@ public ResponseEntity<String> saveRawResponsesFromJsonBodyWithValidation(
124131 return ResponseEntity .status (500 ).body ("Unexpected error" );
125132 }
126133
127- log .info ("Data saved for interrogationId {} and partition {}" ,body .get (INTERROGATION_ID ).toString (),
134+ log .info ("Data saved for interrogationId {} and partition {}" , body .get (INTERROGATION_ID ).toString (),
128135 body .get (PARTITION_ID ).toString ());
129- return ResponseEntity .status (201 ).body (String .format (SUCCESS_MESSAGE ,body .get (INTERROGATION_ID ).toString ()));
136+ return ResponseEntity .status (201 ).body (String .format (SUCCESS_MESSAGE , body .get (INTERROGATION_ID ).toString ()));
130137 }
131138
132139 //GET unprocessed
133140 @ Operation (summary = "Get campaign id and interrogationId from all unprocessed raw json data" )
134141 @ GetMapping (path = "/lunatic-json/get/unprocessed" )
135142 @ PreAuthorize ("hasRole('SCHEDULER')" )
136- public ResponseEntity <List <LunaticJsonRawDataUnprocessedDto >> getUnproccessedJsonRawData (){
143+ public ResponseEntity <List <LunaticJsonRawDataUnprocessedDto >> getUnproccessedJsonRawData () {
137144 log .info ("Try to get unprocessed raw JSON datas..." );
138145 return ResponseEntity .ok (lunaticJsonRawDataApiPort .getUnprocessedDataIds ());
139146 }
140147
141148 @ Hidden
142- @ GetMapping (path = "/lunatic-json/get/by-interrogation-mode-and-campaign" )
149+ @ GetMapping (path = "/lunatic-json/get/by-interrogation-mode-and-campaign" )
143150 @ PreAuthorize ("hasRole('ADMIN')" )
144- public ResponseEntity <LunaticJsonRawDataModel > getJsonRawData (
145- @ RequestParam (INTERROGATION_ID ) String interrogationId ,
146- @ RequestParam ("campaignName" ) String campaignName ,
147- @ RequestParam (value = "mode" ) Mode modeSpecified
148- ) {
149- List <LunaticJsonRawDataModel > data = lunaticJsonRawDataApiPort .getRawData (campaignName ,modeSpecified ,List .of (interrogationId ));
151+ public ResponseEntity <LunaticJsonRawDataModel > getJsonRawData (
152+ @ RequestParam (INTERROGATION_ID ) String interrogationId ,
153+ @ RequestParam ("campaignName" ) String campaignName ,
154+ @ RequestParam (value = "mode" ) Mode modeSpecified
155+ ) {
156+ List <LunaticJsonRawDataModel > data = lunaticJsonRawDataApiPort .getRawData (campaignName , modeSpecified , List .of (interrogationId ));
150157 return ResponseEntity .ok (data .getFirst ());
151158 }
152159
@@ -158,7 +165,7 @@ public ResponseEntity<String> processJsonRawData(
158165 @ RequestParam ("campaignName" ) String campaignName ,
159166 @ RequestParam ("questionnaireId" ) String questionnaireId ,
160167 @ RequestBody List <String > interrogationIdList
161- ){
168+ ) {
162169 log .info ("Try to process raw JSON datas for campaign {} and {} interrogationIds" , campaignName , interrogationIdList .size ());
163170 List <GenesisError > errors = new ArrayList <>();
164171
@@ -168,13 +175,30 @@ public ResponseEntity<String> processJsonRawData(
168175 ResponseEntity .ok ("%d document(s) processed" .formatted (result .dataCount ()))
169176 : ResponseEntity .ok ("%d document(s) processed, including %d FORMATTED after data verification"
170177 .formatted (result .dataCount (), result .formattedDataCount ()));
171- }catch (GenesisException e ){
178+ } catch (GenesisException e ) {
172179 return ResponseEntity .status (e .getStatus ()).body (e .getMessage ());
173180 }
174181 }
175182
183+ @ Operation (summary = "Get lunatic JSON data from one campaign in Genesis Database, filtered by optional start and end dates" )
184+ @ GetMapping (path = "/lunatic-json/{campaignId}" )
185+ @ PreAuthorize ("hasRole('USER_KRAFTWERK')" )
186+ public ResponseEntity <PagedModel <LunaticJsonRawDataModel >> getRawResponsesFromJsonBody (
187+ @ PathVariable String campaignId ,
188+ @ RequestParam (value = "startDate" , required = false ) @ DateTimeFormat (iso = DateTimeFormat .ISO .DATE_TIME ) Instant startDate ,
189+ @ RequestParam (value = "endDate" , required = false ) @ DateTimeFormat (iso = DateTimeFormat .ISO .DATE_TIME ) Instant endDate ,
190+ @ RequestParam (value = "page" , defaultValue = "0" ) int page ,
191+ @ RequestParam (value = "size" , defaultValue = "1000" ) int size
192+ ) {
193+ log .info ("Try to read raw JSONs for campaign {}, with startDate={} and endDate={}" , campaignId , startDate , endDate );
194+ Pageable pageable = PageRequest .of (page , size );
195+ Page <LunaticJsonRawDataModel > rawResponses = lunaticJsonRawDataApiPort .findRawDataByCampaignIdAndDate (campaignId , startDate , endDate , pageable );
196+ log .info ("rawResponses=" + rawResponses .getContent ().size ());
197+ return ResponseEntity .status (HttpStatus .OK ).body (new PagedModel <>(rawResponses ));
198+ }
199+
176200 private void validate (Set <ValidationMessage > errors ) throws GenesisException {
177- if (!errors .isEmpty ()){
201+ if (!errors .isEmpty ()) {
178202 String errorMessage = errors .stream ()
179203 .map (ValidationMessage ::getMessage )
180204 .collect (Collectors .joining (System .lineSeparator () + " - " ));
@@ -187,14 +211,14 @@ private void validate(Set<ValidationMessage> errors) throws GenesisException {
187211 }
188212
189213 private void checkRequiredIds (Map <String , Object > body ) throws GenesisException {
190- for (String requiredKey : List .of (
214+ for (String requiredKey : List .of (
191215 PARTITION_ID ,
192216 "questionnaireModelId" ,
193217 INTERROGATION_ID ,
194218 "surveyUnitId" ,
195219 "mode"
196- )){
197- if (body .get (requiredKey ) == null ){
220+ )) {
221+ if (body .get (requiredKey ) == null ) {
198222 throw new GenesisException (400 , "No %s found in body" .formatted (requiredKey ));
199223 }
200224 }
0 commit comments