Skip to content

Commit becb63a

Browse files
Merge pull request #311 from InseeFr/devGetReview
Get review indicator (for NOQUAL Perret)
2 parents 1d0aea5 + 5efdddc commit becb63a

File tree

5 files changed

+76
-3
lines changed

5 files changed

+76
-3
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# Changelog
2+
## 1.12.0 [TODO]
3+
- Get review indicator endpoint
24

35
## 1.11.0 [2025-10-20]
46
### Added

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ public class DataProcessingContextController {
4646

4747
@Operation(summary = "Create or update a data processing context")
4848
@PutMapping(path = "/review")
49-
@PreAuthorize("hasAnyRole('USER_BACK_OFFICE','SCHEDULER')")
49+
@PreAuthorize("hasAnyRole('USER_PLATINE', 'USER_BACK_OFFICE', 'SCHEDULER')")
5050
public ResponseEntity<Object> saveContext(
5151
@Parameter(description = "Identifier of the partition", required = true) @RequestParam("partitionId") String partitionId,
5252
@Parameter(description = "Allow reviewing") @RequestParam(value = "withReview", defaultValue = "false") Boolean withReview
53-
) {
53+
){
5454
try {
5555
withReview = withReview != null && withReview; //False if null
5656
dataProcessingContextApiPort.saveContext(partitionId, withReview);
@@ -60,6 +60,20 @@ public ResponseEntity<Object> saveContext(
6060
return ResponseEntity.ok().build();
6161
}
6262

63+
@Operation(summary = "Returns partition review indicator")
64+
@GetMapping(path = "/review")
65+
@PreAuthorize("hasAnyRole('USER_BACK_OFFICE','SCHEDULER','USER_PLATINE')")
66+
public ResponseEntity<Object> getReviewIndicator(
67+
@Parameter(description = "Identifier of the partition", required = true) @RequestParam("partitionId") String partitionId
68+
){
69+
try {
70+
boolean withReview = dataProcessingContextApiPort.getReviewByPartitionId(partitionId);
71+
return ResponseEntity.ok(withReview);
72+
}catch (GenesisException e){
73+
return new ResponseEntity<>(e.getMessage(), HttpStatusCode.valueOf(e.getStatus()));
74+
}
75+
}
76+
6377
@Operation(summary = "Schedule a Kraftwerk execution")
6478
@PutMapping(path = "/schedules")
6579
@PreAuthorize("hasRole('USER_KRAFTWERK')")

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,11 @@ void saveKraftwerkExecutionSchedule(String partitionId,
3333
DataProcessingContextModel getContext(String interrogationId) throws GenesisException;
3434
DataProcessingContextModel getContextByPartitionId(String partitionId) throws GenesisException;
3535
List<String> getPartitionIds(boolean withReview);
36+
37+
/**
38+
* Gets the review indicator for a partition
39+
* @param partitionId id of the partition
40+
* @return the review indicator stored in genesis
41+
*/
42+
boolean getReviewByPartitionId(String partitionId) throws GenesisException;
3643
}

src/main/java/fr/insee/genesis/domain/service/context/DataProcessingContextService.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import fr.insee.genesis.domain.ports.spi.DataProcessingContextPersistancePort;
1111
import fr.insee.genesis.domain.ports.spi.SurveyUnitPersistencePort;
1212
import fr.insee.genesis.exceptions.GenesisException;
13+
import fr.insee.genesis.infrastructure.document.context.DataProcessingContextDocument;
1314
import fr.insee.genesis.infrastructure.mappers.DataProcessingContextMapper;
1415
import lombok.extern.slf4j.Slf4j;
1516
import org.springframework.beans.factory.annotation.Autowired;
@@ -168,7 +169,7 @@ public DataProcessingContextModel getContext(String interrogationId) throws Gene
168169

169170
@Override
170171
public DataProcessingContextModel getContextByPartitionId(String partitionId){
171-
return DataProcessingContextMapper.INSTANCE.documentToModel(
172+
return DataProcessingContextMapper.INSTANCE.documentToModel(
172173
dataProcessingContextPersistancePort.findByPartitionId(partitionId)
173174
);
174175
}
@@ -184,4 +185,16 @@ public List<String> getPartitionIds(boolean withReview){
184185
}
185186
return partitionIds;
186187
}
188+
189+
@Override
190+
public boolean getReviewByPartitionId(String partitionId) throws GenesisException {
191+
DataProcessingContextDocument dataProcessingContextDocument =
192+
dataProcessingContextPersistancePort.findByPartitionId(partitionId);
193+
if(dataProcessingContextDocument == null){
194+
throw new GenesisException(404, "Data processing context not found");
195+
}
196+
return DataProcessingContextMapper.INSTANCE.documentToModel(
197+
dataProcessingContextPersistancePort.findByPartitionId(partitionId)
198+
).isWithReview();
199+
}
187200
}

src/test/java/fr/insee/genesis/controller/rest/DataProcessingContextControllerTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import org.assertj.core.api.Assertions;
1818
import org.junit.jupiter.api.BeforeEach;
1919
import org.junit.jupiter.api.Test;
20+
import org.junit.jupiter.params.ParameterizedTest;
21+
import org.junit.jupiter.params.provider.ValueSource;
2022
import org.springframework.http.ResponseEntity;
2123

2224
import java.io.IOException;
@@ -442,6 +444,41 @@ void deleteExpiredScheduleTest_appendLog() throws IOException, GenesisException
442444
.toFile()).exists().content().isNotEmpty().contains("2000","2001");
443445
}
444446

447+
@ParameterizedTest
448+
@ValueSource(booleans = {false, true})
449+
void getReview_test(boolean withReview){
450+
//GIVEN
451+
String partitionId = "TESTPARTITION";
452+
dataProcessingContextPersistancePortStub.getMongoStub().add(
453+
new DataProcessingContextDocument(
454+
"TESTPARTITION",
455+
new ArrayList<>(),
456+
withReview
457+
)
458+
);
459+
460+
//WHEN
461+
ResponseEntity<Object> response = dataProcessingContextController.getReviewIndicator(partitionId);
462+
463+
//THEN
464+
Assertions.assertThat(response.getStatusCode().value()).isEqualTo(200);
465+
Assertions.assertThat(response.getBody().getClass()).isEqualTo(Boolean.class);
466+
Assertions.assertThat((Boolean) response.getBody()).isEqualTo(withReview);
467+
}
468+
469+
@Test
470+
void getReview_no_context_test(){
471+
//WHEN
472+
ResponseEntity<Object> response = dataProcessingContextController.getReviewIndicator(
473+
"TESTPARTITIONIDNOCONTEXT"
474+
);
475+
476+
//THEN
477+
Assertions.assertThat(response.getStatusCode().value()).isEqualTo(404);
478+
}
479+
480+
481+
//UTILITY
445482
private void addNewDocumentToStub() {
446483
DataProcessingContextDocument dataProcessingContextDocumentTest = new DataProcessingContextDocument(
447484
"TESTSURVEY",

0 commit comments

Comments
 (0)