Pull request #531: RED-5142: Sonar issues: persistence-service

Merge in RED/persistence-service from RED-5142-ps1 to master

* commit '5286ca5b49d7957347e6b2d2c61fbc340267990d':
  RED-5142: Sonar issues: persistence-service
This commit is contained in:
Ali Oezyetimoglu 2022-09-05 17:29:48 +02:00 committed by Philipp Schramm
commit 9ab04acece
19 changed files with 196 additions and 228 deletions

View File

@ -113,7 +113,7 @@ public class DossierTemplateCloneService {
cloneWatermarks(dossierTemplate.getId(), clonedDossierTemplate.getId()); cloneWatermarks(dossierTemplate.getId(), clonedDossierTemplate.getId());
}, () -> { }, () -> {
throw new NotFoundException(String.format(dossierTemplatePersistenceService.DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)); throw new NotFoundException(String.format(DossierTemplatePersistenceService.DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId));
}); });
return clonedDossierTemplate; return clonedDossierTemplate;

View File

@ -1,7 +1,16 @@
package com.iqser.red.service.peristence.v1.server.controller; package com.iqser.red.service.peristence.v1.server.controller;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.peristence.v1.server.service.DossierService; import com.iqser.red.service.peristence.v1.server.service.DossierService;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService;
@ -9,17 +18,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttribute; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttribute;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttributeType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttributeType;
import com.iqser.red.service.persistence.service.v1.api.resources.DossierAttributesResource; import com.iqser.red.service.persistence.service.v1.api.resources.DossierAttributesResource;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@ -31,8 +31,7 @@ public class DossierAttributesController implements DossierAttributesResource {
@Override @Override
public List<DossierAttribute> setDossierAttributes(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public List<DossierAttribute> setDossierAttributes(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestBody List<DossierAttribute> dossierAttributes) {
@RequestBody List<DossierAttribute> dossierAttributes) {
var dossier = dossierService.getDossierById(dossierId); var dossier = dossierService.getDossierById(dossierId);
var config = dossierAttributeConfigPersistenceService.getDossierAttributes(dossier.getDossierTemplateId()); var config = dossierAttributeConfigPersistenceService.getDossierAttributes(dossier.getDossierTemplateId());
@ -51,9 +50,9 @@ public class DossierAttributesController implements DossierAttributesResource {
return getDossierAttributes(dossierId); return getDossierAttributes(dossierId);
} }
@Override @Override
public DossierAttribute addOrUpdateDossierAttribute(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public DossierAttribute addOrUpdateDossierAttribute(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestBody DossierAttribute dossierAttribute) {
@RequestBody DossierAttribute dossierAttribute) {
var dossier = dossierService.getDossierById(dossierId); var dossier = dossierService.getDossierById(dossierId);
var dossierAttributes = dossierAttributePersistenceService.getDossierAttributes(dossierId); var dossierAttributes = dossierAttributePersistenceService.getDossierAttributes(dossierId);
@ -62,8 +61,10 @@ public class DossierAttributesController implements DossierAttributesResource {
var typeById = config.stream().collect(Collectors.toMap(entry -> entry.getId(), entry -> entry.getType())); var typeById = config.stream().collect(Collectors.toMap(entry -> entry.getId(), entry -> entry.getType()));
validateDossierAttribute(typeById, dossierAttribute); validateDossierAttribute(typeById, dossierAttribute);
if (dossierAttributes.stream().anyMatch(d -> d.getId().getDossierId().equals(dossierAttribute.getDossierId()) if (dossierAttributes.stream()
&& d.getId().getDossierAttributeConfigId().equals(dossierAttribute.getDossierAttributeConfigId()))) { .anyMatch(d -> d.getId().getDossierId().equals(dossierAttribute.getDossierId()) && d.getId()
.getDossierAttributeConfigId()
.equals(dossierAttribute.getDossierAttributeConfigId()))) {
dossierAttributePersistenceService.updateDossierAttribute(dossierId, dossierAttribute.getDossierAttributeConfigId(), dossierAttribute.getValue()); dossierAttributePersistenceService.updateDossierAttribute(dossierId, dossierAttribute.getDossierAttributeConfigId(), dossierAttribute.getValue());
} else { } else {
dossierAttributePersistenceService.insertDossierAttribute(dossierId, dossierAttribute.getDossierAttributeConfigId(), dossierAttribute.getValue()); dossierAttributePersistenceService.insertDossierAttribute(dossierId, dossierAttribute.getDossierAttributeConfigId(), dossierAttribute.getValue());
@ -72,28 +73,31 @@ public class DossierAttributesController implements DossierAttributesResource {
return convert(dossierAttributePersistenceService.findOne(dossierId, dossierAttribute.getDossierAttributeConfigId()), DossierAttribute.class); return convert(dossierAttributePersistenceService.findOne(dossierId, dossierAttribute.getDossierAttributeConfigId()), DossierAttribute.class);
} }
@Override @Override
public List<DossierAttribute> getDossierAttributes(@PathVariable(DOSSIER_ID_PARAM) String dossierId) { public List<DossierAttribute> getDossierAttributes(@PathVariable(DOSSIER_ID_PARAM) String dossierId) {
return convert(dossierAttributePersistenceService.getDossierAttributes(dossierId), DossierAttribute.class); return convert(dossierAttributePersistenceService.getDossierAttributes(dossierId), DossierAttribute.class);
} }
@Override @Override
public void deleteDossierAttribute(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void deleteDossierAttribute(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(DOSSIER_ATTRIBUTE_ID_PARAM) String dossierAttributeId) {
@PathVariable(DOSSIER_ATTRIBUTE_ID_PARAM) String dossierAttributeId) {
dossierAttributePersistenceService.deleteDossierAttribute(dossierId, dossierAttributeId); dossierAttributePersistenceService.deleteDossierAttribute(dossierId, dossierAttributeId);
} }
private void validateDossierAttribute(Map<String, DossierAttributeType> typeById, DossierAttribute dossierAttribute ){ private void validateDossierAttribute(Map<String, DossierAttributeType> typeById, DossierAttribute dossierAttribute) {
if (!typeById.containsKey(dossierAttribute.getDossierAttributeConfigId())) { if (!typeById.containsKey(dossierAttribute.getDossierAttributeConfigId())) {
throw new ConflictException("Dossier attribute configuration does not exist."); throw new ConflictException("Dossier attribute configuration does not exist.");
} }
DossierAttributeType type = typeById.get(dossierAttribute.getDossierAttributeConfigId()); DossierAttributeType type = typeById.get(dossierAttribute.getDossierAttributeConfigId());
if(type.equals(DossierAttributeType.IMAGE) && dossierAttribute.getValue() != null && !(dossierAttribute.getValue().startsWith("data:image/png;base64") || dossierAttribute.getValue().startsWith("data:image/jpg;base64") || dossierAttribute.getValue().startsWith("data:image/jpeg;base64"))){ if (type.equals(DossierAttributeType.IMAGE) && dossierAttribute.getValue() != null && !(dossierAttribute.getValue()
.startsWith("data:image/png;base64") || dossierAttribute.getValue().startsWith("data:image/jpg;base64") || dossierAttribute.getValue()
.startsWith("data:image/jpeg;base64"))) {
throw new BadRequestException("Only png, jpg and jpeg files are allowed for image dossier attributes"); throw new BadRequestException("Only png, jpg and jpeg files are allowed for image dossier attributes");
} }
} }

View File

@ -142,7 +142,7 @@ public class DossierController implements DossierResource {
DossierInformation dossierInformation = new DossierInformation(); DossierInformation dossierInformation = new DossierInformation();
var dossiers = dossierService.getAllDossiers(); var dossiers = dossierService.getAllDossiers();
if (filteredDossierIds != null && filteredDossierIds.size() > 0) { if (filteredDossierIds != null && !filteredDossierIds.isEmpty()) {
dossiers = dossiers.stream().filter(d -> filteredDossierIds.contains(d.getId())).collect(Collectors.toList()); dossiers = dossiers.stream().filter(d -> filteredDossierIds.contains(d.getId())).collect(Collectors.toList());
} }
dossiers.forEach(d -> { dossiers.forEach(d -> {

View File

@ -1,5 +1,15 @@
package com.iqser.red.service.peristence.v1.server.controller; package com.iqser.red.service.peristence.v1.server.controller;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.peristence.v1.server.service.AnalysisFlagsCalculationService; import com.iqser.red.service.peristence.v1.server.service.AnalysisFlagsCalculationService;
import com.iqser.red.service.peristence.v1.server.service.ExcludeFromAnalysisService; import com.iqser.red.service.peristence.v1.server.service.ExcludeFromAnalysisService;
import com.iqser.red.service.peristence.v1.server.service.FileStatusService; import com.iqser.red.service.peristence.v1.server.service.FileStatusService;
@ -7,20 +17,11 @@ import com.iqser.red.service.peristence.v1.server.service.IndexingService;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; 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.FileModel;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource; import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource;
import com.iqser.red.service.search.v1.model.IndexMessageType; import com.iqser.red.service.search.v1.model.IndexMessageType;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.OffsetDateTime; import lombok.RequiredArgsConstructor;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@ -33,8 +34,7 @@ public class FileStatusController implements StatusResource {
@Override @Override
public JSONPrimitive<Boolean> hasChangesSince(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public JSONPrimitive<Boolean> hasChangesSince(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestBody JSONPrimitive<OffsetDateTime> since) {
@RequestBody JSONPrimitive<OffsetDateTime> since) {
return JSONPrimitive.of(fileStatusService.hasChangesSince(dossierId, since.getValue())); return JSONPrimitive.of(fileStatusService.hasChangesSince(dossierId, since.getValue()));
} }
@ -43,50 +43,53 @@ public class FileStatusController implements StatusResource {
@Override @Override
public List<FileModel> getDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId) { public List<FileModel> getDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId) {
return fileStatusService.getDossierStatus(dossierId).stream() return fileStatusService.getDossierStatus(dossierId).stream().filter(f -> !f.isSoftOrHardDeleted()).collect(Collectors.toList());
.filter(f -> !f.isSoftOrHardDeleted())
.collect(Collectors.toList());
} }
@Override @Override
public List<FileModel> getSoftDeletedDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId) { public List<FileModel> getSoftDeletedDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId) {
return fileStatusService.getDossierStatus(dossierId).stream()
return fileStatusService.getDossierStatus(dossierId)
.stream()
.filter(f3 -> f3.getDeleted() != null && f3.getHardDeletedTime() == null) .filter(f3 -> f3.getDeleted() != null && f3.getHardDeletedTime() == null)
.sorted((f11, f21) -> f21.getDeleted().compareTo(f11.getDeleted())).collect(Collectors.toList()); .sorted((f11, f21) -> f21.getDeleted().compareTo(f11.getDeleted()))
.collect(Collectors.toList());
} }
public List<FileModel> getSoftDeletedForDossierList(@RequestBody List<String> dossierIds) { public List<FileModel> getSoftDeletedForDossierList(@RequestBody List<String> dossierIds) {
return fileStatusService.getSoftDeletedForDossierList(dossierIds); return fileStatusService.getSoftDeletedForDossierList(dossierIds);
} }
@Override @Override
public FileModel getFileStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public FileModel getFileStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) {
@PathVariable(FILE_ID) String fileId) {
return fileStatusService.getStatus(fileId); return fileStatusService.getStatus(fileId);
} }
@Override @Override
public void updateFileModificationDate(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void updateFileModificationDate(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) {
@PathVariable(FILE_ID) String fileId) {
this.fileStatusService.updateFileModificationDate(fileId, OffsetDateTime.now()); this.fileStatusService.updateFileModificationDate(fileId, OffsetDateTime.now());
} }
@Override @Override
public void setCurrentFileAssignee(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void setCurrentFileAssignee(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@PathVariable(FILE_ID) String fileId,
@RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId) { @RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId) {
fileStatusService.setAssignee(fileId, assigneeId); fileStatusService.setAssignee(fileId, assigneeId);
indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2); indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2);
} }
public void setStatusUnderReview(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void setStatusUnderReview(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@PathVariable(FILE_ID) String fileId,
@RequestParam(value = USER_ID_REQUEST_PARAM, required = false) String userId) { @RequestParam(value = USER_ID_REQUEST_PARAM, required = false) String userId) {
FileModel fileStatus = fileStatusService.getStatus(fileId); FileModel fileStatus = fileStatusService.getStatus(fileId);
String assignee = fileStatus.getAssignee(); String assignee = fileStatus.getAssignee();
if (userId != null) { if (userId != null) {
@ -98,8 +101,8 @@ public class FileStatusController implements StatusResource {
indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2); indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2);
} }
public void setStatusUnderApproval(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId, public void setStatusUnderApproval(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) { @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) {
FileModel fileStatus = fileStatusService.getStatus(fileId); FileModel fileStatus = fileStatusService.getStatus(fileId);
@ -108,14 +111,14 @@ public class FileStatusController implements StatusResource {
assignee = approverId; assignee = approverId;
} }
fileStatusService.setStatusSuccessful(fileId, assignee != null ? WorkflowStatus.UNDER_APPROVAL : WorkflowStatus.NEW); fileStatusService.setStatusSuccessful(fileId, assignee != null ? WorkflowStatus.UNDER_APPROVAL : WorkflowStatus.NEW);
fileStatusService.setAssignee(fileId, approverId); fileStatusService.setAssignee(fileId, approverId);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId); analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2); indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2);
} }
public void setStatusApproved(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId, public void setStatusApproved(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) { @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) {
FileModel fileStatus = fileStatusService.getStatus(fileId); FileModel fileStatus = fileStatusService.getStatus(fileId);
@ -132,7 +135,9 @@ public class FileStatusController implements StatusResource {
} }
public void setStatusNew(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) { public void setStatusNew(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) {
FileModel fileStatus = fileStatusService.getStatus(fileId); FileModel fileStatus = fileStatusService.getStatus(fileId);
if (!WorkflowStatus.UNDER_REVIEW.equals(fileStatus.getWorkflowStatus())) { if (!WorkflowStatus.UNDER_REVIEW.equals(fileStatus.getWorkflowStatus())) {
throw new BadRequestException("Allowed transition not possible from: " + fileStatus.getWorkflowStatus() + " to status NEW"); throw new BadRequestException("Allowed transition not possible from: " + fileStatus.getWorkflowStatus() + " to status NEW");
@ -141,15 +146,16 @@ public class FileStatusController implements StatusResource {
fileStatusService.setStatusSuccessful(fileId, WorkflowStatus.NEW); fileStatusService.setStatusSuccessful(fileId, WorkflowStatus.NEW);
} }
public void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excluded) { public void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excluded) {
excludeFromAnalysis.toggleExclusion(dossierId, fileId, excluded); excludeFromAnalysis.toggleExclusion(dossierId, fileId, excluded);
} }
public void toggleAutomaticAnalysis(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excludedFromAutomaticAnalysis) { public void toggleAutomaticAnalysis(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(EXCLUDED_STATUS_PARAM) boolean excludedFromAutomaticAnalysis) {
excludeFromAnalysis.toggleAutomaticAnalysis(dossierId, fileId, excludedFromAutomaticAnalysis); excludeFromAnalysis.toggleAutomaticAnalysis(dossierId, fileId, excludedFromAutomaticAnalysis);

View File

@ -1,21 +1,22 @@
package com.iqser.red.service.peristence.v1.server.controller; package com.iqser.red.service.peristence.v1.server.controller;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService; import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPreferencesPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest; import java.time.OffsetDateTime;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import java.util.List;
import com.iqser.red.service.persistence.service.v1.api.model.notification.Notification;
import com.iqser.red.service.persistence.service.v1.api.resources.NotificationResource;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.time.OffsetDateTime; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
import java.util.List; import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.notification.Notification;
import com.iqser.red.service.persistence.service.v1.api.resources.NotificationResource;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; import lombok.RequiredArgsConstructor;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@ -23,17 +24,21 @@ public class NotificationController implements NotificationResource {
private final NotificationPersistenceService notificationPersistenceService; private final NotificationPersistenceService notificationPersistenceService;
@Override @Override
public JSONPrimitive<Boolean> hasNewNotificationsSince(@PathVariable(USER_ID_PARAM) String userId, @RequestBody JSONPrimitive<OffsetDateTime> since) { public JSONPrimitive<Boolean> hasNewNotificationsSince(@PathVariable(USER_ID_PARAM) String userId, @RequestBody JSONPrimitive<OffsetDateTime> since) {
return JSONPrimitive.of(notificationPersistenceService.hasNewNotificationsSince(userId, since.getValue())); return JSONPrimitive.of(notificationPersistenceService.hasNewNotificationsSince(userId, since.getValue()));
} }
public void addNotification(@RequestBody AddNotificationRequest addNotificationRequest) { public void addNotification(@RequestBody AddNotificationRequest addNotificationRequest) {
notificationPersistenceService.insertNotification(addNotificationRequest); notificationPersistenceService.insertNotification(addNotificationRequest);
} }
public void toggleSeen(@PathVariable(USER_ID_PARAM) String userId, @RequestBody List<Long> notificationIds,
@RequestParam(SET_SEEN_PARAM) boolean setSeen) { public void toggleSeen(@PathVariable(USER_ID_PARAM) String userId, @RequestBody List<Long> notificationIds, @RequestParam(SET_SEEN_PARAM) boolean setSeen) {
notificationIds.forEach(notificationId -> { notificationIds.forEach(notificationId -> {
if (setSeen) { if (setSeen) {
@ -45,8 +50,7 @@ public class NotificationController implements NotificationResource {
} }
public void toggleRead(@PathVariable(USER_ID_PARAM) String userId, @RequestBody List<Long> notificationIds, public void toggleRead(@PathVariable(USER_ID_PARAM) String userId, @RequestBody List<Long> notificationIds, @RequestParam(SET_READ_PARAM) boolean setRead) {
@RequestParam(SET_READ_PARAM) boolean setRead) {
notificationIds.forEach(notificationId -> { notificationIds.forEach(notificationId -> {
if (setRead) { if (setRead) {
@ -67,8 +71,7 @@ public class NotificationController implements NotificationResource {
} }
public List<Notification> getNotifications(@PathVariable(USER_ID_PARAM) String userId, public List<Notification> getNotifications(@PathVariable(USER_ID_PARAM) String userId, @RequestParam(INCLUDE_SEEN_PARAM) boolean includeSeen) {
@RequestParam(INCLUDE_SEEN_PARAM) boolean includeSeen) {
return convert(notificationPersistenceService.getNotifications(userId, includeSeen), Notification.class); return convert(notificationPersistenceService.getNotifications(userId, includeSeen), Notification.class);
} }

View File

@ -69,9 +69,7 @@ public class ReanalysisController implements ReanalysisResource {
var relevantFiles = getAllFilesForDossier(dossierId, true); var relevantFiles = getAllFilesForDossier(dossierId, true);
relevantFiles.stream() relevantFiles.stream().filter(fileStatus -> fileStatus.getLastOCRTime() == null).forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId()));
.filter(fileStatus -> fileStatus.getLastOCRTime() == null)
.forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId()));
} }
@ -79,9 +77,7 @@ public class ReanalysisController implements ReanalysisResource {
var relevantFiles = getRelevantFiles(dossierId, fileIds); var relevantFiles = getRelevantFiles(dossierId, fileIds);
relevantFiles.stream() relevantFiles.stream().filter(fileStatus -> fileStatus.getLastOCRTime() == null).forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId()));
.filter(fileStatus -> fileStatus.getLastOCRTime() == null)
.forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId()));
} }
@ -121,7 +117,8 @@ public class ReanalysisController implements ReanalysisResource {
var importedRedactions = fileManagementStorageService.getImportedRedactions(deleteImportedRedactionsRequest.getDossierId(), deleteImportedRedactionsRequest.getFileId()); var importedRedactions = fileManagementStorageService.getImportedRedactions(deleteImportedRedactionsRequest.getDossierId(), deleteImportedRedactionsRequest.getFileId());
importedRedactions.getImportedRedactions().forEach((key, value) -> value.removeIf(v -> deleteImportedRedactionsRequest.getAnnotationIds().contains(v.getId()))); importedRedactions.getImportedRedactions().forEach((key, value) -> value.removeIf(v -> deleteImportedRedactionsRequest.getAnnotationIds().contains(v.getId())));
fileManagementStorageService.storeJSONObject(deleteImportedRedactionsRequest.getDossierId(), deleteImportedRedactionsRequest.getFileId(), FileType.IMPORTED_REDACTIONS, importedRedactions); fileManagementStorageService.storeJSONObject(deleteImportedRedactionsRequest.getDossierId(), deleteImportedRedactionsRequest.getFileId(), FileType.IMPORTED_REDACTIONS,
importedRedactions);
fileStatusService.setStatusFullReprocess(deleteImportedRedactionsRequest.getDossierId(), deleteImportedRedactionsRequest.getFileId(), true, false); fileStatusService.setStatusFullReprocess(deleteImportedRedactionsRequest.getDossierId(), deleteImportedRedactionsRequest.getFileId(), true, false);
} }
@ -196,9 +193,9 @@ public class ReanalysisController implements ReanalysisResource {
fileStatusService.setStatusReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1, true); fileStatusService.setStatusReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1, true);
}); });
} else { } else {
filesToReanalyse.stream().filter(FileModel::isReanalysisRequired).forEach(file -> { filesToReanalyse.stream()
fileStatusService.setStatusReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1, true); .filter(FileModel::isReanalysisRequired)
}); .forEach(file -> fileStatusService.setStatusReprocess(dossierId, file.getId(), filesToReanalyse.size() == 1, true));
} }
} }

View File

@ -1,6 +1,5 @@
package com.iqser.red.service.peristence.v1.server.controller; package com.iqser.red.service.peristence.v1.server.controller;
import java.time.OffsetDateTime;
import java.util.List; import java.util.List;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
@ -32,14 +31,15 @@ public class RedactionLogController implements RedactionLogResource {
} }
public SectionGrid getSectionGrid(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public SectionGrid getSectionGrid(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId) {
@PathVariable(FILE_ID) String fileId) {
return redactionLogService.getSectionGrid(dossierId, fileId); return redactionLogService.getSectionGrid(dossierId, fileId);
} }
public RedactionLog getFilteredRedactionLog(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, public RedactionLog getFilteredRedactionLog(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestBody FilteredRedactionLogRequest filteredRedactionLogRequest) { @RequestBody FilteredRedactionLogRequest filteredRedactionLogRequest) {
return redactionLogService.getFilteredRedactionLog(dossierId, fileId, filteredRedactionLogRequest); return redactionLogService.getFilteredRedactionLog(dossierId, fileId, filteredRedactionLogRequest);
} }

View File

@ -7,28 +7,23 @@ import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUpdateRequest;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils; import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateDownload; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateDownload;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUpdateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest;
import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource; import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource;
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
import com.iqser.red.storage.commons.service.StorageService; import com.iqser.red.storage.commons.service.StorageService;
import lombok.NonNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@RestController @RestController
@ -42,55 +37,47 @@ public class ReportTemplateController implements ReportTemplateResource {
public ReportTemplate uploadTemplate(@RequestBody ReportTemplateUploadRequest reportTemplateUploadRequest) { public ReportTemplate uploadTemplate(@RequestBody ReportTemplateUploadRequest reportTemplateUploadRequest) {
String templateId = null; String templateId = null;
List<ReportTemplateEntity> reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest List<ReportTemplateEntity> reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest.getDossierTemplateId());
.getDossierTemplateId());
for (ReportTemplateEntity reportTemplate : reportTemplates) { for (ReportTemplateEntity reportTemplate : reportTemplates) {
if (reportTemplate.getFileName() if (reportTemplate.getFileName()
.equals(reportTemplateUploadRequest.getFileName()) && reportTemplate.isMultiFileReport() && reportTemplateUploadRequest .equals(reportTemplateUploadRequest.getFileName()) && reportTemplate.isMultiFileReport() && reportTemplateUploadRequest.isMultiFileReport() || reportTemplate.getFileName()
.isMultiFileReport() || reportTemplate.getFileName() .equals(reportTemplateUploadRequest.getFileName()) && !reportTemplate.isMultiFileReport() && !reportTemplateUploadRequest.isMultiFileReport()) {
.equals(reportTemplateUploadRequest.getFileName()) && !reportTemplate.isMultiFileReport() && !reportTemplateUploadRequest
.isMultiFileReport()) {
templateId = reportTemplate.getTemplateId(); templateId = reportTemplate.getTemplateId();
} }
} }
String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), reportTemplateUploadRequest String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), reportTemplateUploadRequest.getFileName());
.getFileName());
storageService.storeObject(storageId, new ByteArrayInputStream(reportTemplateUploadRequest.getTemplate())); storageService.storeObject(storageId, new ByteArrayInputStream(reportTemplateUploadRequest.getTemplate()));
if (templateId != null) { if (templateId != null) {
reportTemplatePersistenceService.updateTemplate(reportTemplateUploadRequest.getDossierTemplateId(), templateId, ReportTemplateUpdateRequest reportTemplatePersistenceService.updateTemplate(reportTemplateUploadRequest.getDossierTemplateId(), templateId, ReportTemplateUpdateRequest.builder()
.builder()
.fileName(reportTemplateUploadRequest.getFileName()) .fileName(reportTemplateUploadRequest.getFileName())
.multiFileReport(reportTemplateUploadRequest.isMultiFileReport()) .multiFileReport(reportTemplateUploadRequest.isMultiFileReport())
.activeByDefault(reportTemplateUploadRequest.isActiveByDefault()) .activeByDefault(reportTemplateUploadRequest.isActiveByDefault())
.build()); .build());
} else { } else {
templateId = UUID.randomUUID().toString(); templateId = UUID.randomUUID().toString();
reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, reportTemplateUploadRequest reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, reportTemplateUploadRequest.getFileName(),
.getFileName(), reportTemplateUploadRequest.isActiveByDefault(), reportTemplateUploadRequest.isMultiFileReport()); reportTemplateUploadRequest.isActiveByDefault(), reportTemplateUploadRequest.isMultiFileReport());
} }
return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class); return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class);
} }
public List<ReportTemplate> getAvailableReportTemplates( public List<ReportTemplate> getAvailableReportTemplates(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId) {
@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId) {
return convert(reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplateId), ReportTemplate.class); return convert(reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplateId), ReportTemplate.class);
} }
public ReportTemplate getReportTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, public ReportTemplate getReportTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @PathVariable(TEMPLATE_ID) String templateId) {
@PathVariable(TEMPLATE_ID) String templateId) {
return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class); return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class);
} }
public ReportTemplateDownload downloadReportTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, public ReportTemplateDownload downloadReportTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @PathVariable(TEMPLATE_ID) String templateId) {
@PathVariable(TEMPLATE_ID) String templateId) {
String storageId = reportTemplatePersistenceService.find(templateId).getStorageId(); String storageId = reportTemplatePersistenceService.find(templateId).getStorageId();
try { try {
@ -102,8 +89,7 @@ public class ReportTemplateController implements ReportTemplateResource {
} }
public void deleteTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, public void deleteTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @PathVariable(TEMPLATE_ID) String templateId) {
@PathVariable(TEMPLATE_ID) String templateId) {
String storageId = reportTemplatePersistenceService.find(templateId).getStorageId(); String storageId = reportTemplatePersistenceService.find(templateId).getStorageId();
storageService.deleteObject(storageId); storageService.deleteObject(storageId);
@ -112,8 +98,7 @@ public class ReportTemplateController implements ReportTemplateResource {
} }
public void updateTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, public void updateTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @PathVariable(TEMPLATE_ID) String templateId,
@PathVariable(TEMPLATE_ID) String templateId,
@RequestBody ReportTemplateUpdateRequest reportTemplateUpdateRequest) { @RequestBody ReportTemplateUpdateRequest reportTemplateUpdateRequest) {
reportTemplatePersistenceService.updateTemplate(dossierTemplateId, templateId, reportTemplateUpdateRequest); reportTemplatePersistenceService.updateTemplate(dossierTemplateId, templateId, reportTemplateUpdateRequest);

View File

@ -1,16 +1,20 @@
package com.iqser.red.service.peristence.v1.server.controller; package com.iqser.red.service.peristence.v1.server.controller;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import java.util.List;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService; import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark;
import com.iqser.red.service.persistence.service.v1.api.resources.WatermarkResource; import com.iqser.red.service.persistence.service.v1.api.resources.WatermarkResource;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@ -20,24 +24,32 @@ public class WatermarkController implements WatermarkResource {
public Watermark createOrUpdateWatermark(@RequestBody Watermark watermark) { public Watermark createOrUpdateWatermark(@RequestBody Watermark watermark) {
return convert(watermarkService.createOrUpdateWatermark(watermark), Watermark.class); return convert(watermarkService.createOrUpdateWatermark(watermark), Watermark.class);
} }
public Watermark getWatermark(@PathVariable(WATERMARK_ID_PARAMETER_NAME) long watermarkId) { public Watermark getWatermark(@PathVariable(WATERMARK_ID_PARAMETER_NAME) long watermarkId) {
return convert(watermarkService.getWatermark(watermarkId), Watermark.class); return convert(watermarkService.getWatermark(watermarkId), Watermark.class);
} }
@Override @Override
public List<Watermark> getWatermarksForDossierTemplateId(@RequestParam(value = DOSSIER_TEMPLATE_ID_PARAMETER_NAME) String dossierTemplateId) { public List<Watermark> getWatermarksForDossierTemplateId(@RequestParam(value = DOSSIER_TEMPLATE_ID_PARAMETER_NAME) String dossierTemplateId) {
return convert(watermarkService.getWatermarksForDossierTemplateId(dossierTemplateId), Watermark.class); return convert(watermarkService.getWatermarksForDossierTemplateId(dossierTemplateId), Watermark.class);
} }
public void deleteWatermark(@PathVariable(WATERMARK_ID_PARAMETER_NAME) long watermarkId) { public void deleteWatermark(@PathVariable(WATERMARK_ID_PARAMETER_NAME) long watermarkId) {
watermarkService.deleteWatermark(watermarkId); watermarkService.deleteWatermark(watermarkId);
} }
public JSONPrimitive<Boolean> isWatermarkUsed(@RequestParam(WATERMARK_ID_PARAMETER_NAME) long watermarkId) { public JSONPrimitive<Boolean> isWatermarkUsed(@RequestParam(WATERMARK_ID_PARAMETER_NAME) long watermarkId) {
return JSONPrimitive.of(watermarkService.isWatermarkUsed(watermarkId)); return JSONPrimitive.of(watermarkService.isWatermarkUsed(watermarkId));
} }

View File

@ -53,27 +53,15 @@ public class EntityTypesMigration4 extends Migration {
if (type != null) { if (type != null) {
// Check if type is systemManaged // Check if type is systemManaged
if (type.getType() != null && systemManagedTypes.contains(type.getType())) { type.setSystemManaged(type.getType() != null && systemManagedTypes.contains(type.getType()));
type.setSystemManaged(true);
} else {
type.setSystemManaged(false);
}
// Check if type is autoHideSkipped // Check if type is autoHideSkipped
if (type.getType() != null && autoHideSkippedTypes.contains(type.getType())) { type.setAutoHideSkipped(type.getType() != null && autoHideSkippedTypes.contains(type.getType()));
type.setAutoHideSkipped(true);
} else {
type.setAutoHideSkipped(false);
}
// Check if type has dictionaries // Check if type has dictionaries
List<? extends BaseDictionaryEntry> entries = entryPersistenceService.getEntries(type.getId(), DictionaryEntryType.ENTRY, null); List<? extends BaseDictionaryEntry> entries = entryPersistenceService.getEntries(type.getId(), DictionaryEntryType.ENTRY, null);
if (entries != null && !entries.isEmpty()) { type.setHasDictionary(entries != null && !entries.isEmpty());
type.setHasDictionary(true);
} else {
type.setHasDictionary(false);
}
} }
} }

View File

@ -62,14 +62,14 @@ public class RedTextPosition {
@JsonAttribute() @JsonAttribute()
public float[] getPosition() { public float[] getPosition() {
var position = new float[4]; var pos = new float[4];
position[0] = XDirAdj; pos[0] = XDirAdj;
position[1] = YDirAdj; pos[1] = YDirAdj;
position[2] = widthDirAdj; pos[2] = widthDirAdj;
position[3] = heightDir; pos[3] = heightDir;
return position; return pos;
} }

View File

@ -38,7 +38,7 @@ public class MasterPersistenceConfig {
private final ConfigurableListableBeanFactory beanFactory; private final ConfigurableListableBeanFactory beanFactory;
private final JpaProperties jpaProperties; private final JpaProperties jpaProperties;
private final String entityPackages = "com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity"; private static final String entityPackages = "com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity";
@Bean @Bean

View File

@ -39,7 +39,7 @@ public class TenantPersistenceConfig {
private final ConfigurableListableBeanFactory beanFactory; private final ConfigurableListableBeanFactory beanFactory;
private final JpaProperties jpaProperties; private final JpaProperties jpaProperties;
private final String entityPackages = "com.iqser.red.service.persistence.management.v1.processor.entity"; private static final String entityPackages = "com.iqser.red.service.persistence.management.v1.processor.entity";
@Primary @Primary

View File

@ -1,18 +1,20 @@
package com.iqser.red.service.peristence.v1.server.service; package com.iqser.red.service.peristence.v1.server.service;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE;
import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStats;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Service @Service
@ -24,7 +26,6 @@ public class DossierStatsService {
// private Map<String, DossierStats> dossierStatsMap = new HashMap<>(); // private Map<String, DossierStats> dossierStatsMap = new HashMap<>();
// @Scheduled(fixedDelay = 10000, initialDelay = 1000) // @Scheduled(fixedDelay = 10000, initialDelay = 1000)
// public void computeDossierStats() { // public void computeDossierStats() {
// log.info("Computing Dossier Stats ... "); // log.info("Computing Dossier Stats ... ");
@ -38,6 +39,7 @@ public class DossierStatsService {
// log.info("Dossier Stats Computed in {}ms", System.currentTimeMillis() - start); // log.info("Dossier Stats Computed in {}ms", System.currentTimeMillis() - start);
// } // }
public DossierStats getDossierStats(String dossierId) { public DossierStats getDossierStats(String dossierId) {
// var stats = dossierStatsMap.get(dossierId); // var stats = dossierStatsMap.get(dossierId);
// if (stats == null) { // if (stats == null) {
@ -47,7 +49,9 @@ public class DossierStatsService {
return computeDossierStats(dossierService.getDossierById(dossierId)); return computeDossierStats(dossierService.getDossierById(dossierId));
} }
private DossierStats computeDossierStats(DossierEntity dossierEntity) { private DossierStats computeDossierStats(DossierEntity dossierEntity) {
var dossierId = dossierEntity.getId(); var dossierId = dossierEntity.getId();
DossierStats dossierStats = new DossierStats(); DossierStats dossierStats = new DossierStats();
@ -63,36 +67,32 @@ public class DossierStatsService {
dossierStats.setNumberOfSoftDeletedFiles(fileStatusService.countSoftDeletedFiles(dossierId)); dossierStats.setNumberOfSoftDeletedFiles(fileStatusService.countSoftDeletedFiles(dossierId));
dossierStats.setNumberOfPages(files.stream().mapToInt(FileModel::getNumberOfPages).sum()); dossierStats.setNumberOfPages(files.stream().mapToInt(FileModel::getNumberOfPages).sum());
dossierStats.setNumberOfExcludedPages(files.stream().mapToInt(f -> f.getExcludedPages().size()).sum()); dossierStats.setNumberOfExcludedPages(files.stream().mapToInt(f -> f.getExcludedPages().size()).sum());
files.stream().filter(FileModel::isHasRedactions).findAny().ifPresent( files.stream().filter(FileModel::isHasRedactions).findAny().ifPresent(v -> dossierStats.setHasRedactionsFilePresent(true));
(v) -> dossierStats.setHasRedactionsFilePresent(true) files.stream().filter(FileModel::isHasHints).filter(f -> !f.isHasRedactions()).findAny().ifPresent(v -> dossierStats.setHasHintsNoRedactionsFilePresent(true));
); files.stream().filter(FileModel::isHasSuggestions).findAny().ifPresent(v -> dossierStats.setHasSuggestionsFilePresent(true));
files.stream().filter(FileModel::isHasHints).filter(f -> !f.isHasRedactions()).findAny().ifPresent( files.stream().filter(FileModel::isHasUpdates).findAny().ifPresent(v -> dossierStats.setHasUpdatesFilePresent(true));
(v) -> dossierStats.setHasHintsNoRedactionsFilePresent(true) files.stream()
); .filter(f -> !f.isHasRedactions())
files.stream().filter(FileModel::isHasSuggestions).findAny().ifPresent(
(v) -> dossierStats.setHasSuggestionsFilePresent(true)
);
files.stream().filter(FileModel::isHasUpdates).findAny().ifPresent(
(v) -> dossierStats.setHasUpdatesFilePresent(true)
);
files.stream().filter(f -> !f.isHasRedactions())
.filter(f -> !f.isHasHints()) .filter(f -> !f.isHasHints())
.filter(f -> !f.isHasSuggestions()) .filter(f -> !f.isHasSuggestions())
.filter(f -> !f.isHasUpdates()) .filter(f -> !f.isHasUpdates())
.findAny().ifPresent( .findAny()
(v) -> dossierStats.setHasNoFlagsFilePresent(true) .ifPresent(v -> dossierStats.setHasNoFlagsFilePresent(true));
);
var fileCountPerProcessingStatus = files.stream().collect(Collectors.toMap(FileModel::getProcessingStatus, e -> 1, Math::addExact)); var fileCountPerProcessingStatus = files.stream().collect(Collectors.toMap(FileModel::getProcessingStatus, e -> 1, Math::addExact));
dossierStats.setFileCountPerProcessingStatus(fileCountPerProcessingStatus); dossierStats.setFileCountPerProcessingStatus(fileCountPerProcessingStatus);
var fileCountPerWorkflowStatus = files.stream().collect(Collectors.toMap(FileModel::getWorkflowStatus, e -> 1, Math::addExact)); var fileCountPerWorkflowStatus = files.stream().collect(Collectors.toMap(FileModel::getWorkflowStatus, e -> 1, Math::addExact));
dossierStats.setFileCountPerWorkflowStatus(fileCountPerWorkflowStatus); dossierStats.setFileCountPerWorkflowStatus(fileCountPerWorkflowStatus);
files.stream()
files.stream().sorted(Comparator.comparing(FileModel::getLastUpdated, Comparator.nullsLast(Comparator.reverseOrder()))) .sorted(Comparator.comparing(FileModel::getLastUpdated, Comparator.nullsLast(Comparator.reverseOrder())))
.findFirst().ifPresent((file) -> dossierStats.setLastFileUpdateDate(file.getLastUpdated())); .findFirst()
files.stream().sorted(Comparator.comparing(FileModel::getFileManipulationDate, Comparator.nullsLast(Comparator.reverseOrder()))) .ifPresent(file -> dossierStats.setLastFileUpdateDate(file.getLastUpdated()));
.findFirst().ifPresent((file) -> dossierStats.setFileManipulationDate(file.getFileManipulationDate())); files.stream()
.sorted(Comparator.comparing(FileModel::getFileManipulationDate, Comparator.nullsLast(Comparator.reverseOrder())))
.findFirst()
.ifPresent(file -> dossierStats.setFileManipulationDate(file.getFileManipulationDate()));
return dossierStats; return dossierStats;
} }
} }

View File

@ -95,51 +95,39 @@ public class FileService {
forceRedactionPersistenceService.findForceRedactions(fileId, false).forEach(annotation -> { forceRedactionPersistenceService.findForceRedactions(fileId, false).forEach(annotation -> {
forceRedactionPersistenceService.softDelete(fileId, annotation.getId().getAnnotationId(), softDeletedTime); forceRedactionPersistenceService.softDelete(fileId, annotation.getId().getAnnotationId(), softDeletedTime);
commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), false) commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), false)
.forEach(comment -> { .forEach(comment -> commentPersistenceService.softDelete(comment.getId(), softDeletedTime));
commentPersistenceService.softDelete(comment.getId(), softDeletedTime);
});
}); });
removeRedactionPersistenceService.findRemoveRedactions(fileId, false).forEach(annotation -> { removeRedactionPersistenceService.findRemoveRedactions(fileId, false).forEach(annotation -> {
removeRedactionPersistenceService.softDelete(fileId, annotation.getId().getAnnotationId(), softDeletedTime); removeRedactionPersistenceService.softDelete(fileId, annotation.getId().getAnnotationId(), softDeletedTime);
commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), false) commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), false)
.forEach(comment -> { .forEach(comment -> commentPersistenceService.softDelete(comment.getId(), softDeletedTime));
commentPersistenceService.softDelete(comment.getId(), softDeletedTime);
});
}); });
addRedactionPersistenceService.findAddRedactions(fileId, false).forEach(annotation -> { addRedactionPersistenceService.findAddRedactions(fileId, false).forEach(annotation -> {
addRedactionPersistenceService.softDelete(fileId, annotation.getId().getAnnotationId(), softDeletedTime); addRedactionPersistenceService.softDelete(fileId, annotation.getId().getAnnotationId(), softDeletedTime);
commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), false) commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), false)
.forEach(comment -> { .forEach(comment -> commentPersistenceService.softDelete(comment.getId(), softDeletedTime));
commentPersistenceService.softDelete(comment.getId(), softDeletedTime);
});
}); });
recategorizationPersistenceService.findRecategorizations(fileId, false).forEach(recatigorization -> { recategorizationPersistenceService.findRecategorizations(fileId, false).forEach(recatigorization -> {
recategorizationPersistenceService.softDelete(fileId, recatigorization.getId() recategorizationPersistenceService.softDelete(fileId, recatigorization.getId()
.getAnnotationId(), softDeletedTime); .getAnnotationId(), softDeletedTime);
commentPersistenceService.findCommentsByAnnotationId(fileId, recatigorization.getId() commentPersistenceService.findCommentsByAnnotationId(fileId, recatigorization.getId()
.getAnnotationId(), false).forEach(comment -> { .getAnnotationId(), false).forEach(comment -> commentPersistenceService.softDelete(comment.getId(), softDeletedTime));
commentPersistenceService.softDelete(comment.getId(), softDeletedTime);
});
}); });
resizeRedactionPersistenceService.findResizeRedactions(fileId, false).forEach(annotation -> { resizeRedactionPersistenceService.findResizeRedactions(fileId, false).forEach(annotation -> {
resizeRedactionPersistenceService.softDelete(fileId, annotation.getId().getAnnotationId(), softDeletedTime); resizeRedactionPersistenceService.softDelete(fileId, annotation.getId().getAnnotationId(), softDeletedTime);
commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), false) commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), false)
.forEach(comment -> { .forEach(comment -> commentPersistenceService.softDelete(comment.getId(), softDeletedTime));
commentPersistenceService.softDelete(comment.getId(), softDeletedTime);
});
}); });
legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false).forEach(legalBasisChange -> { legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false).forEach(legalBasisChange -> {
legalBasisChangePersistenceService.softDelete(fileId, legalBasisChange.getId() legalBasisChangePersistenceService.softDelete(fileId, legalBasisChange.getId()
.getAnnotationId(), softDeletedTime); .getAnnotationId(), softDeletedTime);
commentPersistenceService.findCommentsByAnnotationId(fileId, legalBasisChange.getId() commentPersistenceService.findCommentsByAnnotationId(fileId, legalBasisChange.getId()
.getAnnotationId(), false).forEach(comment -> { .getAnnotationId(), false).forEach(comment -> commentPersistenceService.softDelete(comment.getId(), softDeletedTime));
commentPersistenceService.softDelete(comment.getId(), softDeletedTime);
});
}); });
viewedPagesPersistenceService.deleteForFile(fileId); viewedPagesPersistenceService.deleteForFile(fileId);
@ -160,41 +148,31 @@ public class FileService {
forceRedactionPersistenceService.findForceRedactions(fileId, true).forEach(annotation -> { forceRedactionPersistenceService.findForceRedactions(fileId, true).forEach(annotation -> {
forceRedactionPersistenceService.hardDelete(fileId, annotation.getId().getAnnotationId()); forceRedactionPersistenceService.hardDelete(fileId, annotation.getId().getAnnotationId());
commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true) commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true)
.forEach(comment -> { .forEach(comment -> commentPersistenceService.hardDelete(comment.getId()));
commentPersistenceService.hardDelete(comment.getId());
});
}); });
removeRedactionPersistenceService.findRemoveRedactions(fileId, true).forEach(annotation -> { removeRedactionPersistenceService.findRemoveRedactions(fileId, true).forEach(annotation -> {
removeRedactionPersistenceService.hardDelete(fileId, annotation.getId().getAnnotationId()); removeRedactionPersistenceService.hardDelete(fileId, annotation.getId().getAnnotationId());
commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true) commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true)
.forEach(comment -> { .forEach(comment -> commentPersistenceService.hardDelete(comment.getId()));
commentPersistenceService.hardDelete(comment.getId());
});
}); });
addRedactionPersistenceService.findAddRedactions(fileId, true).forEach(annotation -> { addRedactionPersistenceService.findAddRedactions(fileId, true).forEach(annotation -> {
addRedactionPersistenceService.hardDelete(fileId, annotation.getId().getAnnotationId()); addRedactionPersistenceService.hardDelete(fileId, annotation.getId().getAnnotationId());
commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true) commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true)
.forEach(comment -> { .forEach(comment -> commentPersistenceService.hardDelete(comment.getId()));
commentPersistenceService.hardDelete(comment.getId());
});
}); });
recategorizationPersistenceService.findRecategorizations(fileId, true).forEach(recatigorization -> { recategorizationPersistenceService.findRecategorizations(fileId, true).forEach(recatigorization -> {
recategorizationPersistenceService.hardDelete(fileId, recatigorization.getId().getAnnotationId()); recategorizationPersistenceService.hardDelete(fileId, recatigorization.getId().getAnnotationId());
commentPersistenceService.findCommentsByAnnotationId(fileId, recatigorization.getId() commentPersistenceService.findCommentsByAnnotationId(fileId, recatigorization.getId()
.getAnnotationId(), true).forEach(comment -> { .getAnnotationId(), true).forEach(comment -> commentPersistenceService.hardDelete(comment.getId()));
commentPersistenceService.hardDelete(comment.getId());
});
}); });
resizeRedactionPersistenceService.findResizeRedactions(fileId, true).forEach(annotation -> { resizeRedactionPersistenceService.findResizeRedactions(fileId, true).forEach(annotation -> {
resizeRedactionPersistenceService.hardDelete(fileId, annotation.getId().getAnnotationId()); resizeRedactionPersistenceService.hardDelete(fileId, annotation.getId().getAnnotationId());
commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true) commentPersistenceService.findCommentsByAnnotationId(fileId, annotation.getId().getAnnotationId(), true)
.forEach(comment -> { .forEach(comment -> commentPersistenceService.hardDelete(comment.getId()));
commentPersistenceService.hardDelete(comment.getId());
});
}); });
indexingService.addToDeleteFromIndexQueue(dossierId, fileId, 2); indexingService.addToDeleteFromIndexQueue(dossierId, fileId, 2);

View File

@ -15,7 +15,6 @@ import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfigu
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.search.v1.model.IndexMessage; import com.iqser.red.service.search.v1.model.IndexMessage;
import com.iqser.red.service.search.v1.model.IndexMessageType; import com.iqser.red.service.search.v1.model.IndexMessageType;
@ -70,12 +69,8 @@ public class IndexingService {
public void addToIndexingQueue(IndexMessageType indexMessageType, String dossierTemplateId, String dossierId, String fileId, int priority) { public void addToIndexingQueue(IndexMessageType indexMessageType, String dossierTemplateId, String dossierId, String fileId, int priority) {
try { try {
rabbitTemplate.convertAndSend(MessagingConfiguration.INDEXING_QUEUE, objectMapper.writeValueAsString(IndexMessage.builder() rabbitTemplate.convertAndSend(MessagingConfiguration.INDEXING_QUEUE, objectMapper.writeValueAsString(
.messageType(indexMessageType) IndexMessage.builder().messageType(indexMessageType).dossierTemplateId(dossierTemplateId).dossierId(dossierId).fileId(fileId).build()), message -> {
.dossierTemplateId(dossierTemplateId)
.dossierId(dossierId)
.fileId(fileId)
.build()), message -> {
message.getMessageProperties().setPriority(priority); message.getMessageProperties().setPriority(priority);
return message; return message;
}); });
@ -88,13 +83,11 @@ public class IndexingService {
public void addToDeleteFromIndexQueue(String dossierId, String fileId, int priority) { public void addToDeleteFromIndexQueue(String dossierId, String fileId, int priority) {
try { try {
rabbitTemplate.convertAndSend(MessagingConfiguration.DELETE_FROM_INDEX_QUEUE, objectMapper.writeValueAsString(IndexMessage.builder() rabbitTemplate.convertAndSend(MessagingConfiguration.DELETE_FROM_INDEX_QUEUE,
.dossierId(dossierId) objectMapper.writeValueAsString(IndexMessage.builder().dossierId(dossierId).fileId(fileId).build()), message -> {
.fileId(fileId) message.getMessageProperties().setPriority(priority);
.build()), message -> { return message;
message.getMessageProperties().setPriority(priority); });
return message;
});
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -61,18 +61,18 @@ public class ManualRedactionProviderService {
Set<ManualForceRedaction> forceRedactions = convert(forceRedactionPersistenceService.findForceRedactions(fileId, false), ManualForceRedaction.class); Set<ManualForceRedaction> forceRedactions = convert(forceRedactionPersistenceService.findForceRedactions(fileId, false), ManualForceRedaction.class);
Set<ManualImageRecategorization> recategorizations = new HashSet<>(convert(recategorizationPersistenceService.findRecategorizations(fileId, false), ManualImageRecategorization.class, new ManualImageRecategorizationMapper())); Set<ManualImageRecategorization> recategorizations = new HashSet<>(
convert(recategorizationPersistenceService.findRecategorizations(fileId, false), ManualImageRecategorization.class, new ManualImageRecategorizationMapper()));
Set<ManualLegalBasisChange> legalBasisChanges = convert(legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false), ManualLegalBasisChange.class); Set<ManualLegalBasisChange> legalBasisChanges = convert(legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false), ManualLegalBasisChange.class);
Set<ManualResizeRedaction> resizeRedactions = new HashSet<>(convert(resizeRedactionPersistenceService.findResizeRedactions(fileId, false), ManualResizeRedaction.class, new ManualResizeRedactionMapper())); Set<ManualResizeRedaction> resizeRedactions = new HashSet<>(
convert(resizeRedactionPersistenceService.findResizeRedactions(fileId, false), ManualResizeRedaction.class, new ManualResizeRedactionMapper()));
Map<String, List<CommentEntity>> commentEntities = commentPersistenceService.findCommentsByFileID(fileId, false); Map<String, List<CommentEntity>> commentEntities = commentPersistenceService.findCommentsByFileID(fileId, false);
Map<String, List<Comment>> comments = new HashMap<>(); Map<String, List<Comment>> comments = new HashMap<>();
commentEntities.forEach((s, c) -> { commentEntities.forEach((s, c) -> comments.put(s, convert(c, Comment.class)));
comments.put(s, convert(c, Comment.class));
});
return new ManualRedactions(removals, entriesToAdd, forceRedactions, recategorizations, legalBasisChanges, resizeRedactions, comments); return new ManualRedactions(removals, entriesToAdd, forceRedactions, recategorizations, legalBasisChanges, resizeRedactions, comments);
} }

View File

@ -172,7 +172,7 @@ public class ManualRedactionService {
.stream() .stream()
.filter(p -> p.getPage() > numberOfPages) .filter(p -> p.getPage() > numberOfPages)
.findAny() .findAny()
.ifPresent((p) -> new BadRequestException("Invalid page found in the request")); .ifPresent(p -> new BadRequestException("Invalid page found in the request"));
} }

View File

@ -3,7 +3,9 @@ package com.iqser.red.service.peristence.v1.server.utils;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
public class StorageIdUtils { public final class StorageIdUtils {
private StorageIdUtils() {}
public static String getStorageId(String dossierId, String fileId, FileType fileType) { public static String getStorageId(String dossierId, String fileId, FileType fileType) {
return dossierId + "/" + fileId + "." + fileType.name() + fileType.getExtension(); return dossierId + "/" + fileId + "." + fileType.name() + fileType.getExtension();