Pull request #52: 3.0 efsa readiness

Merge in RED/persistence-service from 3.0-efsa-readiness to master

* commit '62cbda7214c7dee1233c683ae906ad989c20f833':
  legal basis api reviewer to null
  allow set null for reviewer/approver
  allow set null for reviewer/approver
This commit is contained in:
Timo Bejan 2021-10-11 16:07:15 +02:00
commit 1df38e430f
13 changed files with 110 additions and 33 deletions

View File

@ -11,7 +11,6 @@ import lombok.NoArgsConstructor;
@Builder
public class LegalBasis {
private long id;
private String name;
private String description;
private String reason;

View File

@ -10,16 +10,22 @@ import java.util.List;
public interface LegalBasisMappingResource {
String LEGAL_BASIS_PATH = "/legalBasis";
String DELETE_PATH = "/delete";
String VERSION_PATH = "/version";
String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId";
String DOSSIER_TEMPLATE_PATH_VARIABLE = "/{" + DOSSIER_TEMPLATE_PARAMETER_NAME + "}";
@PostMapping(value = LEGAL_BASIS_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE + DELETE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
void deleteLegalBasis(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List<String> legalBasisNames);
@PutMapping(value = LEGAL_BASIS_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE)
void addOrUpdateLegalBasis(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody LegalBasis legalBasis);
@ResponseStatus(HttpStatus.NO_CONTENT)
@PostMapping(value = LEGAL_BASIS_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE)
void setLegalBasisMapping(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List<LegalBasis> legalBasisMapping);
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
@GetMapping(value = LEGAL_BASIS_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)

View File

@ -22,6 +22,7 @@ public interface StatusResource {
String EXCLUDED_STATUS_PARAM = "excluded";
String APPROVER_ID_REQUEST_PARAM = "approverId";
String REVIEWER_ID_REQUEST_PARAM = "reviewerId";
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
@ -47,7 +48,7 @@ public interface StatusResource {
@PostMapping(value = STATUS_PATH + "/reviewer" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE)
void setCurrentFileReviewer(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestBody JSONPrimitive<String> currentReviewer);
@RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required =false) String reviewerId);
@PostMapping(value = STATUS_PATH + "/underreview" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE)

View File

@ -24,7 +24,7 @@ public class ManualRedactionEntryEntity {
private AnnotationEntityId id;
@Column(name = "user_id")
private String user;
@Column
@Column(length = 4000)
private String typeId;
@Column(length = 4000)
private String value;

View File

@ -8,17 +8,12 @@ import lombok.NoArgsConstructor;
import javax.persistence.*;
@Data
@NoArgsConstructor
@Entity
@AllArgsConstructor
@Builder
@Table(name = "legal_basis")
@Embeddable
@AllArgsConstructor
@NoArgsConstructor
public class LegalBasisEntity {
@Id
@GeneratedValue
private long id;
@Column
private String name;
@Column(length = 4000)
private String description;

View File

@ -18,7 +18,7 @@ public class LegalBasisMappingEntity {
@Column
private long version;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@ElementCollection
private List<LegalBasisEntity> legalBasis = new ArrayList<>();
}

View File

@ -276,7 +276,7 @@ public class FileStatusPersistenceService {
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setCurrentReviewer(currentReviewer);
file.setLastReviewer(lastReviewer);
file.setStatus(FileStatus.UNDER_REVIEW);
file.setStatus(currentReviewer == null ? FileStatus.UNASSIGNED :FileStatus.UNDER_REVIEW);
}, () -> {
throw new NotFoundException("Unknown file=" + fileId);
});

View File

@ -2,14 +2,15 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisMappingEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisMappingRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
@ -22,6 +23,36 @@ public class LegalBasisMappingPersistenceService {
private final LegalBasisMappingRepository legalBasisMappingRepository;
@Transactional
public void deleteLegalBasis(String dossierTemplateId, List<String> legalBasisNames) {
var mapping = getLegalBasisMappingOrCreate(dossierTemplateId);
var filteredLegalBasis = mapping.getLegalBasis().stream().filter(l -> !legalBasisNames.contains(l.getName())).collect(Collectors.toList());
mapping.setLegalBasis(filteredLegalBasis);
mapping.setVersion(mapping.getVersion() + 1);
legalBasisMappingRepository.save(mapping);
}
@Transactional
public void addOrUpdateLegalBasis(String dossierTemplateId, LegalBasis legalBasis) {
var mapping = getLegalBasisMappingOrCreate(dossierTemplateId);
mapping.getLegalBasis().stream().filter(l -> l.getName().equals(legalBasis.getName())).findAny().ifPresentOrElse(existingBasis -> {
existingBasis.setReason(legalBasis.getReason());
existingBasis.setDescription(legalBasis.getDescription());
}, () -> mapping.getLegalBasis().add(LegalBasisEntity.builder()
.name(legalBasis.getName())
.description(legalBasis.getDescription())
.reason(legalBasis.getReason()).build()));
mapping.setVersion(mapping.getVersion() + 1);
legalBasisMappingRepository.save(mapping);
}
@Transactional
public void setLegalBasisMapping(String dossierTemplateId, List<LegalBasis> legalBasisMapping) {
@ -40,9 +71,21 @@ public class LegalBasisMappingPersistenceService {
}
@Transactional
public List<LegalBasisEntity> getLegalBasisMapping(String dossierTemplateId) {
return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMappingEntity::getLegalBasis)
.orElseThrow(() -> new NotFoundException("Legal Basis Not configured!"));
return getLegalBasisMappingOrCreate(dossierTemplateId).getLegalBasis();
}
private LegalBasisMappingEntity getLegalBasisMappingOrCreate(String dossierTemplateId) {
return legalBasisMappingRepository.findById(dossierTemplateId).orElseGet(() -> {
// create on get if not present
var lbm = new LegalBasisMappingEntity();
lbm.setDossierTemplateId(dossierTemplateId);
lbm.setLegalBasis(new ArrayList<>());
lbm.setVersion(1);
return legalBasisMappingRepository.save(lbm);
});
}
public long getVersion(String dossierTemplateId) {

View File

@ -3,7 +3,6 @@ package com.iqser.red.service.peristence.v1.server.controller;
import com.iqser.red.service.peristence.v1.server.service.*;
import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus;
import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource;
@ -70,10 +69,10 @@ public class FileStatusController implements StatusResource {
@Override
public void setCurrentFileReviewer(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId,
@RequestBody JSONPrimitive<String> currentFileReviewerRequest) {
@RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required = false) String reviewerId) {
fileStatusService.setCurrentReviewer(dossierId, fileId, currentFileReviewerRequest.getValue());
fileStatusService.setStatusSuccessful(fileId, FileStatus.UNDER_REVIEW);
fileStatusService.setCurrentReviewer(dossierId, fileId, reviewerId);
fileStatusService.setStatusSuccessful(fileId, reviewerId != null ? FileStatus.UNDER_REVIEW : FileStatus.UNASSIGNED);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -85,7 +84,7 @@ public class FileStatusController implements StatusResource {
FileEntity fileStatus = fileStatusService.getStatus(fileId);
String lastReviewer = fileStatus.getLastReviewer();
fileStatusService.setCurrentReviewer(dossierId, fileId, lastReviewer);
fileStatusService.setStatusSuccessful(fileId, FileStatus.UNDER_REVIEW);
fileStatusService.setStatusSuccessful(fileId, lastReviewer != null ? FileStatus.UNDER_REVIEW : FileStatus.UNASSIGNED);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -94,13 +93,8 @@ public class FileStatusController implements StatusResource {
@PathVariable(FILE_ID) String fileId,
@RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) {
var dossier = dossierService.getDossierById(dossierId);
String dossierOwner = dossier.getOwnerId();
fileStatusService.setCurrentReviewer(dossierId, fileId, approverId != null ? approverId : dossierOwner);
fileStatusService.setStatusSuccessful(fileId, FileStatus.UNDER_APPROVAL);
fileStatusService.setCurrentReviewer(dossierId, fileId, approverId);
fileStatusService.setStatusSuccessful(fileId, approverId != null ? FileStatus.UNDER_APPROVAL : FileStatus.UNASSIGNED);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}

View File

@ -21,6 +21,15 @@ public class LegalBasisMappingController implements LegalBasisMappingResource {
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
@Override
public void deleteLegalBasis(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List<String> legalBasisNames) {
legalBasisMappingPersistenceService.deleteLegalBasis(dossierTemplateId, legalBasisNames);
}
@Override
public void addOrUpdateLegalBasis(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody LegalBasis legalBasis) {
legalBasisMappingPersistenceService.addOrUpdateLegalBasis(dossierTemplateId, legalBasis);
}
@Override
@Transactional

View File

@ -1,5 +1,7 @@
package com.iqser.red.service.peristence.v1.server.controller;
import com.iqser.red.service.peristence.v1.server.service.AnalysisFlagsCalculationService;
import com.iqser.red.service.peristence.v1.server.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ViewedPage;
import com.iqser.red.service.persistence.service.v1.api.resources.ViewedPagesResource;
@ -17,12 +19,16 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma
public class ViewedPagesController implements ViewedPagesResource {
private final ViewedPagesPersistenceService viewedPagesPersistenceService;
private final FileStatusService fileStatusService;
private final AnalysisFlagsCalculationService analysisFlagsCalculationService;
public void addPage(@PathVariable(FILE_ID) String fileId, @PathVariable(ROLE) String role,
@RequestBody Integer page) {
viewedPagesPersistenceService.insertPage(fileId, role, page);
var file = fileStatusService.getStatus(fileId);
analysisFlagsCalculationService.calculateFlags(file.getDossierId(), fileId);
}
@ -30,6 +36,8 @@ public class ViewedPagesController implements ViewedPagesResource {
@RequestBody Integer page) {
viewedPagesPersistenceService.removePage(fileId, role, page);
var file = fileStatusService.getStatus(fileId);
analysisFlagsCalculationService.calculateFlags(file.getDossierId(), fileId);
}

View File

@ -54,7 +54,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), JSONPrimitive.of("1"));
fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(),"1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1");
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW);
@ -70,7 +70,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getExcludedPages()).isEmpty();
fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), JSONPrimitive.of("1"));
fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1");
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNDER_REVIEW);

View File

@ -40,7 +40,7 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest {
mappings.add(LegalBasis.builder().name("test 1").description("test 1").reason("test 1").build());
mappings.add(LegalBasis.builder().name("test 2").description("test 2").reason("test 2").build());
legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), mappings);
assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(1);
assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(2);
var mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
@ -48,9 +48,31 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest {
assertThat(mapping.stream().map(LegalBasis::getName).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2");
var legalBasis = LegalBasis.builder().name("test 3").description("test 3").reason("test 3").build();
legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), legalBasis);
mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
assertThat(mapping.size()).isEqualTo(3);
assertThat(mapping.stream().map(LegalBasis::getName).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2", "test 3");
legalBasis = LegalBasis.builder().name("test 3").reason("test 3").description("test 3 - updated").build();
legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), legalBasis);
mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
assertThat(mapping.size()).isEqualTo(3);
assertThat(mapping.stream().map(LegalBasis::getDescription).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2", "test 3 - updated");
legalBasisClient.deleteLegalBasis(dossierTemplate.getId(),Lists.newArrayList("test 1"));
mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
assertThat(mapping.size()).isEqualTo(2);
legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), Lists.newArrayList());
assertThat(legalBasisClient.getLegalBasisMapping(dossierTemplate.getId())).isEmpty();
assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(2);
assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(6);
}
}