status poll and rework of dossier-stats
This commit is contained in:
parent
9eb3eedc5c
commit
b83e915feb
@ -1,11 +1,13 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.resources;
|
||||
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@ -22,6 +24,15 @@ public interface DossierResource {
|
||||
|
||||
String INCLUDE_DELETED_PARAM = "includeDeleted";
|
||||
|
||||
String SINCE_REQUEST_PARAM="since";
|
||||
|
||||
String CHANGES_PATH = "/has-changes";
|
||||
|
||||
@ResponseBody
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
@GetMapping(value = REST_PATH+CHANGES_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
JSONPrimitive<Boolean> hasChangesSince(@RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since);
|
||||
|
||||
@PostMapping(value = REST_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
Dossier addDossier(@RequestBody CreateOrUpdateDossierRequest dossierRequest);
|
||||
|
||||
|
||||
@ -4,8 +4,10 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@ -19,6 +21,6 @@ public interface DossierStatsResource {
|
||||
@GetMapping(value = REST_PATH + DOSSIER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
DossierStats getDossierStats(@PathVariable(DOSSIER_ID_PARAM) String dossierId);
|
||||
|
||||
@GetMapping(value = REST_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
Map<String, DossierStats> getDossierStats(@RequestBody Set<String> dossierIds);
|
||||
@PostMapping(value = REST_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
List<DossierStats> getDossierStats(@RequestBody Set<String> dossierIds);
|
||||
}
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.resources;
|
||||
|
||||
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 org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
@ -14,6 +16,7 @@ public interface NotificationResource {
|
||||
String NOTIFICATION_PATH = "/notification";
|
||||
String TOGGLE_SEEN_PATH = "/toggle-seen";
|
||||
String TOGGLE_READ_PATH = "/toggle-read";
|
||||
String CHANGES_PATH = "/has-changes";
|
||||
|
||||
String USER_ID_PARAM = "userId";
|
||||
String USER_ID_PATH_PARAM = "/{" + USER_ID_PARAM + "}";
|
||||
@ -21,7 +24,13 @@ public interface NotificationResource {
|
||||
String INCLUDE_SEEN_PARAM = "includeSeen";
|
||||
String SET_SEEN_PARAM = "setSeen";
|
||||
String SET_READ_PARAM = "setRead";
|
||||
String SINCE_REQUEST_PARAM = "since";
|
||||
|
||||
@ResponseBody
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
@GetMapping(value = NOTIFICATION_PATH + CHANGES_PATH + USER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
JSONPrimitive<Boolean> hasNewNotificationsSince(@PathVariable(USER_ID_PARAM) String userId,
|
||||
@RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since);
|
||||
|
||||
@PostMapping(value = NOTIFICATION_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
void addNotification(@RequestBody AddNotificationRequest addNotificationRequest);
|
||||
|
||||
@ -6,6 +6,7 @@ import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@ -19,16 +20,26 @@ public interface StatusResource {
|
||||
String FILE_ID = "fileId";
|
||||
String FILE_ID_PATH_VARIABLE = "/{" + FILE_ID + "}";
|
||||
|
||||
String CHANGES_PATH = "/has-changes";
|
||||
|
||||
String EXCLUDED_STATUS_PARAM = "excluded";
|
||||
|
||||
String APPROVER_ID_REQUEST_PARAM = "approverId";
|
||||
String REVIEWER_ID_REQUEST_PARAM = "reviewerId";
|
||||
String SINCE_REQUEST_PARAM="since";
|
||||
|
||||
|
||||
|
||||
@ResponseBody
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
@GetMapping(value = STATUS_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
List<FileModel> getAllStatuses();
|
||||
|
||||
@ResponseBody
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
@GetMapping(value = STATUS_PATH+DOSSIER_ID_PATH_PARAM+CHANGES_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
JSONPrimitive<Boolean> hasChangesSince(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since);
|
||||
|
||||
@ResponseBody
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
@GetMapping(value = STATUS_PATH + DOSSIER_ID_PATH_PARAM, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
|
||||
@ -33,6 +33,9 @@ public class DossierEntity {
|
||||
@Column
|
||||
private OffsetDateTime date;
|
||||
|
||||
@Column
|
||||
private OffsetDateTime lastUpdated;
|
||||
|
||||
@Column(length = 4000)
|
||||
private String description;
|
||||
|
||||
|
||||
@ -31,6 +31,7 @@ public class DossierPersistenceService {
|
||||
private final DossierTemplateRepository dossierTemplateRepository;
|
||||
private final ReportTemplateRepository reportTemplateRepository;
|
||||
|
||||
|
||||
public DossierEntity insert(CreateOrUpdateDossierRequest createOrUpdateDossierRequest) {
|
||||
|
||||
DossierEntity dossier = new DossierEntity();
|
||||
@ -38,7 +39,7 @@ public class DossierPersistenceService {
|
||||
dossier.setId(UUID.randomUUID().toString());
|
||||
dossier.setStatus(DossierStatus.ACTIVE);
|
||||
dossier.setDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
|
||||
dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId()));
|
||||
var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds());
|
||||
reportTemplates.forEach(r -> r.getDossiers().add(dossier));
|
||||
@ -56,6 +57,7 @@ public class DossierPersistenceService {
|
||||
dossierRepository.findById(dossierId).ifPresent(dossier -> {
|
||||
BeanUtils.copyProperties(createOrUpdateDossierRequest, dossier);
|
||||
dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId()));
|
||||
dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds());
|
||||
reportTemplates.forEach(r -> r.getDossiers().add(dossier));
|
||||
dossier.setReportTemplates(reportTemplates);
|
||||
@ -104,6 +106,7 @@ public class DossierPersistenceService {
|
||||
public void hardDelete(String dossierId) {
|
||||
dossierRepository.findById(dossierId).ifPresent(dossier -> {
|
||||
dossier.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
dossier.setStatus(DossierStatus.DELETED);
|
||||
dossier.setSoftDeletedTime(dossier.getSoftDeletedTime() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : dossier.getSoftDeletedTime());
|
||||
});
|
||||
@ -117,6 +120,7 @@ public class DossierPersistenceService {
|
||||
throw new BadRequestException("Cannot undelete a hard-deleted dossier!");
|
||||
}
|
||||
dossier.setStatus(DossierStatus.ACTIVE);
|
||||
dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
dossier.setSoftDeletedTime(null);
|
||||
});
|
||||
}
|
||||
@ -125,9 +129,13 @@ public class DossierPersistenceService {
|
||||
@Transactional
|
||||
public void markDossierAsDeleted(String dossierId, OffsetDateTime softDeletedTime) {
|
||||
dossierRepository.findById(dossierId).ifPresent(dossier -> {
|
||||
dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
dossier.setStatus(DossierStatus.DELETED);
|
||||
dossier.setSoftDeletedTime(softDeletedTime);
|
||||
});
|
||||
}
|
||||
|
||||
public boolean hasChangesSince(OffsetDateTime since) {
|
||||
return dossierRepository.existsByLastUpdatedIsAfter(since.truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ public class FileStatusPersistenceService {
|
||||
file.setAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setUploader(uploader);
|
||||
file.setLastUploaded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
fileRepository.save(file);
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ public class FileStatusPersistenceService {
|
||||
|
||||
@Transactional
|
||||
public void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, boolean hasSuggestions, boolean hasComments, boolean hasUpdates) {
|
||||
fileRepository.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates);
|
||||
fileRepository.updateFlags(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates);
|
||||
}
|
||||
|
||||
|
||||
@ -112,6 +112,7 @@ public class FileStatusPersistenceService {
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setProcessingStatus(ProcessingStatus.PROCESSED);
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setLastIndexed(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
@ -123,6 +124,7 @@ public class FileStatusPersistenceService {
|
||||
public void updateLastOCRTime(String fileId, OffsetDateTime time) {
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setLastOCRTime(time);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
@ -134,6 +136,7 @@ public class FileStatusPersistenceService {
|
||||
public void updateHasComments(String fileId, boolean hasComments) {
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setHasAnnotationComments(hasComments);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
@ -144,6 +147,7 @@ public class FileStatusPersistenceService {
|
||||
public void updateLastManualRedaction(String fileId, OffsetDateTime date) {
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setLastManualRedaction(date);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
@ -155,6 +159,7 @@ public class FileStatusPersistenceService {
|
||||
public void setUpdateLastManualRedactionAndHasSuggestions(String fileId, OffsetDateTime date, boolean hasSuggestions) {
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setLastManualRedaction(date);
|
||||
file.setHasSuggestions(hasSuggestions);
|
||||
}, () -> {
|
||||
@ -171,6 +176,7 @@ public class FileStatusPersistenceService {
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
var fileAttributeEntities = convertFileAttributes(dossierId, file, fileAttributes);
|
||||
file.setLastFileAttributeChange(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setFileAttributes(fileAttributeEntities);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
@ -183,6 +189,7 @@ public class FileStatusPersistenceService {
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setLastManualRedaction(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setExcludedPages(excludedPages);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
@ -212,6 +219,7 @@ public class FileStatusPersistenceService {
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setProcessingStatus(ProcessingStatus.DELETED);
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setDeleted(softDeletedTime);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
@ -225,6 +233,7 @@ public class FileStatusPersistenceService {
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setProcessingStatus(ProcessingStatus.DELETED);
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted());
|
||||
file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
|
||||
@ -242,6 +251,7 @@ public class FileStatusPersistenceService {
|
||||
if (file.getHardDeletedTime() != null) {
|
||||
throw new BadRequestException("Cannot undelete a hard-deleted dossier file!");
|
||||
}
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setProcessingStatus(ProcessingStatus.PROCESSED);
|
||||
file.setDeleted(null);
|
||||
}, () -> {
|
||||
@ -255,6 +265,7 @@ public class FileStatusPersistenceService {
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setCurrentReviewer(currentReviewer);
|
||||
file.setLastReviewer(lastReviewer);
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setWorkflowStatus(currentReviewer == null ? WorkflowStatus.UNASSIGNED :WorkflowStatus.UNDER_REVIEW);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
@ -267,6 +278,7 @@ public class FileStatusPersistenceService {
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
file.setExcluded(excluded);
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setLastProcessed(null);
|
||||
file.setLastReviewer(null);
|
||||
file.setCurrentReviewer(null);
|
||||
@ -334,4 +346,7 @@ public class FileStatusPersistenceService {
|
||||
}
|
||||
|
||||
|
||||
public boolean hasChangesSince(String dossierId, OffsetDateTime since) {
|
||||
return fileRepository.existsByDossierIdAndLastUpdatedIsAfter(dossierId,since);
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@ -20,6 +21,9 @@ public class NotificationPersistenceService {
|
||||
|
||||
private final NotificationRepository notificationRepository;
|
||||
|
||||
public boolean hasNewNotificationsSince(String userId, OffsetDateTime since) {
|
||||
return notificationRepository.existsByUserIdAndCreationDateIsAfter(userId, since.truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public void insertNotification(AddNotificationRequest addNotificationRequest) {
|
||||
|
||||
@ -3,5 +3,10 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
public interface DossierRepository extends JpaRepository<DossierEntity, String> {
|
||||
|
||||
boolean existsByLastUpdatedIsAfter(OffsetDateTime since);
|
||||
|
||||
}
|
||||
|
||||
@ -12,11 +12,25 @@ import java.util.List;
|
||||
import javax.persistence.Column;
|
||||
|
||||
public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
|
||||
boolean existsByDossierIdAndLastUpdatedIsAfter(String dossierId, OffsetDateTime since);
|
||||
|
||||
List<FileEntity> findByDossierId(String dossierId);
|
||||
|
||||
@Modifying
|
||||
@Query("update FileEntity e set e.hasRedactions = :hasRedactions , e.hasHints = :hasHints, e.hasSuggestions = :hasSuggestions, e.hasImages = :hasImages, e.hasUpdates = :hasUpdates, e.hasAnnotationComments = :hasComments where e.id =:fileId")
|
||||
void updateFlags(String fileId, boolean hasRedactions, boolean hasHints, boolean hasImages, boolean hasSuggestions, boolean hasComments, boolean hasUpdates);
|
||||
@Query("update FileEntity e set e.hasRedactions = :hasRedactions ," +
|
||||
" e.hasHints = :hasHints, e.hasSuggestions = :hasSuggestions," +
|
||||
" e.hasImages = :hasImages, e.hasUpdates = :hasUpdates, e.hasAnnotationComments = :hasComments, " +
|
||||
" e.lastUpdated = :lastUpdated " +
|
||||
" where e.id =:fileId")
|
||||
void updateFlags(String fileId,
|
||||
OffsetDateTime lastUpdated,
|
||||
boolean hasRedactions,
|
||||
boolean hasHints,
|
||||
boolean hasImages,
|
||||
boolean hasSuggestions,
|
||||
boolean hasComments,
|
||||
boolean hasUpdates);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -4,11 +4,14 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.notifica
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface NotificationRepository extends JpaRepository<NotificationEntity, Long> {
|
||||
|
||||
boolean existsByUserIdAndCreationDateIsAfter(String userId, OffsetDateTime since);
|
||||
|
||||
List<NotificationEntity> findByUserIdOrderByCreationDateDesc(String userId);
|
||||
|
||||
@Query("Select n from NotificationEntity n where n.softDeleted is null and n.userId = :userId order by n.creationDate desc")
|
||||
|
||||
@ -7,6 +7,7 @@ import com.iqser.red.service.peristence.v1.server.utils.DossierMapper;
|
||||
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.exception.DossierNotFoundException;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatus;
|
||||
@ -35,6 +36,12 @@ public class DossierController implements DossierResource {
|
||||
private final FileStatusService fileStatusService;
|
||||
private final FileService fileService;
|
||||
|
||||
@Override
|
||||
public JSONPrimitive<Boolean> hasChangesSince(@RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since) {
|
||||
|
||||
return JSONPrimitive.of(dossierService.hasChangesSince(since));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
|
||||
@ -6,6 +6,7 @@ import com.iqser.red.service.persistence.service.v1.api.resources.DossierStatsRe
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
@ -23,7 +24,7 @@ public class DossierStatsController implements DossierStatsResource {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, DossierStats> getDossierStats(Set<String> dossierIds) {
|
||||
return dossierIds.stream().collect(Collectors.toMap(Function.identity(), dossierStatsService::getDossierStats));
|
||||
public List<DossierStats> getDossierStats(Set<String> dossierIds) {
|
||||
return dossierIds.stream().map(dossierStatsService::getDossierStats).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ 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.ProcessingStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
|
||||
@ -13,6 +14,7 @@ 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 java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
@ -38,6 +40,14 @@ public class FileStatusController implements StatusResource {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public JSONPrimitive<Boolean> hasChangesSince(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
|
||||
@RequestParam(SINCE_REQUEST_PARAM) OffsetDateTime since) {
|
||||
|
||||
return JSONPrimitive.of(fileStatusService.hasChangesSince(dossierId,since));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<FileModel> getDossierStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId) {
|
||||
|
||||
|
||||
@ -1,7 +1,10 @@
|
||||
package com.iqser.red.service.peristence.v1.server.controller;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
|
||||
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 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 lombok.RequiredArgsConstructor;
|
||||
@ -21,12 +24,25 @@ public class NotificationController implements NotificationResource {
|
||||
|
||||
private final NotificationPersistenceService notificationPersistenceService;
|
||||
|
||||
private final NotificationPreferencesPersistenceService notificationPreferencesPersistenceService;
|
||||
|
||||
public void addNotification(@RequestBody AddNotificationRequest addNotificationRequest) {
|
||||
|
||||
notificationPersistenceService.insertNotification(addNotificationRequest);
|
||||
@Override
|
||||
public JSONPrimitive<Boolean> hasNewNotificationsSince(String userId, OffsetDateTime since) {
|
||||
return JSONPrimitive.of(notificationPersistenceService.hasNewNotificationsSince(userId, since));
|
||||
}
|
||||
|
||||
public void addNotification(@RequestBody AddNotificationRequest addNotificationRequest) {
|
||||
try {
|
||||
var userPreferences = notificationPreferencesPersistenceService.getNotificationPreferences(addNotificationRequest.getUserId());
|
||||
if (userPreferences.getInAppNotifications().contains(addNotificationRequest.getNotificationType())
|
||||
|| userPreferences.getEmailNotifications().contains(addNotificationRequest.getNotificationType())) {
|
||||
notificationPersistenceService.insertNotification(addNotificationRequest);
|
||||
}
|
||||
} catch (NotFoundException e) {
|
||||
notificationPersistenceService.insertNotification(addNotificationRequest);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void toggleSeen(@PathVariable(USER_ID_PARAM) String userId, @RequestBody List<Long> notificationIds,
|
||||
@RequestParam(SET_SEEN_PARAM) boolean setSeen) {
|
||||
|
||||
@ -94,4 +94,7 @@ public class DossierService {
|
||||
return dossierPersistenceService.findAllDossiers();
|
||||
}
|
||||
|
||||
public boolean hasChangesSince(OffsetDateTime since) {
|
||||
return dossierPersistenceService.hasChangesSince(since);
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.UserNotFoundException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
|
||||
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.FileType;
|
||||
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;
|
||||
@ -344,4 +345,7 @@ public class FileStatusService {
|
||||
return fileAttributeList;
|
||||
}
|
||||
|
||||
public boolean hasChangesSince(String dossierId, OffsetDateTime since) {
|
||||
return fileStatusPersistenceService.hasChangesSince(dossierId,since);
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,15 +10,12 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do
|
||||
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.ProcessingStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
|
||||
|
||||
import org.hibernate.jdbc.Work;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@ -57,7 +54,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest {
|
||||
// alter file 1
|
||||
var loadedFile1 = fileClient.getFileStatus(dossier1.getId(), file1.getId());
|
||||
assertThat(loadedFile1.isHasRedactions()).isFalse();
|
||||
fileRepository.findById(file1.getId()).ifPresent((file)->{
|
||||
fileRepository.findById(file1.getId()).ifPresent((file) -> {
|
||||
file.setNumberOfAnalyses(NUMBER_PAGES_ANALYZED);
|
||||
file.setHasRedactions(true);
|
||||
file.setHasHints(true);
|
||||
@ -68,18 +65,18 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest {
|
||||
assertThat(loadedFile1.isHasRedactions()).isTrue();
|
||||
|
||||
// alter file 2
|
||||
fileRepository.findById(file2.getId()).ifPresent((file)->{
|
||||
fileRepository.findById(file2.getId()).ifPresent((file) -> {
|
||||
file.setHasSuggestions(true);
|
||||
fileRepository.save(file);
|
||||
});
|
||||
|
||||
// second dossier
|
||||
dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate,"Dossier2");
|
||||
dossier2 = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "Dossier2");
|
||||
var file3 = fileTesterAndProvider.testAndProvideFile(dossier2, "file3");
|
||||
var file4 = fileTesterAndProvider.testAndProvideFile(dossier2, "file4");
|
||||
|
||||
//alter file 4
|
||||
fileRepository.findById(file4.getId()).ifPresent((file)->{
|
||||
fileRepository.findById(file4.getId()).ifPresent((file) -> {
|
||||
file.setHasHints(true);
|
||||
file.setWorkflowStatus(WorkflowStatus.APPROVED);
|
||||
fileRepository.save(file);
|
||||
@ -106,18 +103,18 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest {
|
||||
dossierIds.add(dossier1.getId());
|
||||
dossierIds.add(dossier2.getId());
|
||||
|
||||
Map<String, DossierStats> dossierStatsMap = dossierStatsClient.getDossierStats(dossierIds);
|
||||
List<DossierStats> dossierStatsList = dossierStatsClient.getDossierStats(dossierIds);
|
||||
|
||||
// get the result for dossier2
|
||||
DossierStats dossierStats2 = dossierStatsMap.get(dossier2.getId());
|
||||
assertThat(dossierStats2.getNumberOfFiles()).isEqualTo(2);
|
||||
assertThat(dossierStats2.getNumberOfAnalysedPages()).isEqualTo(0);
|
||||
assertThat(dossierStats2.isHasRedactionsFilePresent()).isFalse();
|
||||
assertThat(dossierStats2.isHasHintsNoRedactionsFilePresent()).isTrue();
|
||||
assertThat(dossierStats2.isHasSuggestionsFilePresent()).isFalse();
|
||||
assertThat(dossierStats2.isHasUpdatesFilePresent()).isFalse();
|
||||
assertThat(dossierStats2.isHasNoFlagsFilePresent()).isTrue();
|
||||
assertThat(dossierStats2.getFileCountPerWorkflowStatus().get(WorkflowStatus.UNASSIGNED)).isEqualTo(1);
|
||||
assertThat(dossierStats2.getFileCountPerWorkflowStatus().get(WorkflowStatus.APPROVED)).isEqualTo(1);
|
||||
DossierStats dossierStats = dossierStatsList.stream().filter(d -> d.getDossierId().equals(dossier2.getId())).findAny().get();
|
||||
assertThat(dossierStats.getNumberOfFiles()).isEqualTo(2);
|
||||
assertThat(dossierStats.getNumberOfAnalysedPages()).isEqualTo(0);
|
||||
assertThat(dossierStats.isHasRedactionsFilePresent()).isFalse();
|
||||
assertThat(dossierStats.isHasHintsNoRedactionsFilePresent()).isTrue();
|
||||
assertThat(dossierStats.isHasSuggestionsFilePresent()).isFalse();
|
||||
assertThat(dossierStats.isHasUpdatesFilePresent()).isFalse();
|
||||
assertThat(dossierStats.isHasNoFlagsFilePresent()).isTrue();
|
||||
assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.UNASSIGNED)).isEqualTo(1);
|
||||
assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.APPROVED)).isEqualTo(1);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user