diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserStatsController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserStatsController.java index ee8c2357a..916b0aba4 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserStatsController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/UserStatsController.java @@ -2,13 +2,9 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_USER_STATS; -import java.util.List; - import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.RestController; -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.service.DossierService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; @@ -32,25 +28,12 @@ public class UserStatsController implements UserStatsResource { @PreAuthorize("hasAuthority('" + READ_USER_STATS + "')") public UserStats getUserStats(String userId) { - if (!userService.getUserById(userId).isEmpty()) { + if (userService.getUserById(userId).isEmpty()) { return null; } - List allDossiers = dossierService.getAllDossiers(); - List allFiles = fileStatusPersistenceService.getAllFiles() - .stream() - .filter(fileEntity -> fileEntity.getAssignee() != null) - .filter(file -> file.getAssignee().equals(userId)) - .toList(); - int numberOfDossierOwnerships = allDossiers.stream() - .filter(fileEntity -> fileEntity.getOwnerId() != null) - .filter(dossier -> dossier.getOwnerId().equals(userId)) - .toList().size(); - int numberOfDossierMemberships = allDossiers.stream() - .filter(fileEntity -> fileEntity.getMemberIds() != null) - .filter(dossier -> dossier.getMemberIds().contains(userId)) - .toList().size(); - int numberOfAssignedFiles = allFiles.size(); - return new UserStats(numberOfDossierMemberships, numberOfDossierOwnerships, numberOfAssignedFiles); + return new UserStats(this.dossierService.getNumberOfDossierMemberships(userId), + this.dossierService.getNumberOfDossierOwnerships(userId), + this.fileStatusPersistenceService.getNumberOfAssignedFiles(userId)); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java index feeb1226b..b0886bc76 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java @@ -6,6 +6,17 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; +import com.iqser.red.service.persistence.management.v1.processor.utils.JSONDownloadFileTypeConverter; +import com.iqser.red.service.persistence.management.v1.processor.utils.JSONStringSetConverter; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierVisibility; + import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Convert; @@ -19,18 +30,6 @@ import jakarta.persistence.ManyToMany; import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; - -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; -import com.iqser.red.service.persistence.management.v1.processor.utils.JSONDownloadFileTypeConverter; -import com.iqser.red.service.persistence.management.v1.processor.utils.JSONStringSetConverter; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierVisibility; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java index 8a18c26d4..348393251 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierService.java @@ -142,6 +142,18 @@ public class DossierService { } + public int getNumberOfDossierOwnerships(String userId) { + + return dossierPersistenceService.getNumberOfDossierOwnerships(userId); + } + + + public int getNumberOfDossierMemberships(String userId) { + + return dossierPersistenceService.getNumberOfDossierMemberships(userId); + } + + public List getAllDossiers(List dossierIds) { return dossierPersistenceService.findAllDossiers(dossierIds); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index a4e10a712..65f556b5a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -179,6 +179,20 @@ public class DossierPersistenceService { } + public int getNumberOfDossierOwnerships(String userId) { + + List dossiers = dossierRepository.findDossiersByOwnerId(userId); + return dossiers.size(); + } + + + public int getNumberOfDossierMemberships(String userId) { + + List dossiers = dossierRepository.findDossiersByMemberId(userId); + return dossiers.size(); + } + + public List findAllDossiers(List dossierIds) { if (!dossierIds.isEmpty()) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 4ca594587..673fb5523 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -22,9 +22,9 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo import com.iqser.red.service.persistence.management.v1.processor.model.FileIdentifier; import com.iqser.red.service.persistence.management.v1.processor.model.OCRStatusUpdateResponse; import com.iqser.red.service.persistence.management.v1.processor.model.websocket.AnalyseStatus; -import com.iqser.red.service.persistence.management.v1.processor.service.websocket.WebsocketService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.websocket.WebsocketService; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentMappingMetadata; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileErrorInfo; @@ -403,7 +403,10 @@ public class FileStatusPersistenceService { public List getStatusesForDossierTemplate(String dossierTemplateId) { return dossierService.findAllDossiersForDossierTemplateId(dossierTemplateId) - .stream().map(dossier -> fileRepository.findByDossierId(dossier.getId())).flatMap(List::stream).toList(); + .stream() + .map(dossier -> fileRepository.findByDossierId(dossier.getId())) + .flatMap(List::stream) + .toList(); } @@ -434,6 +437,13 @@ public class FileStatusPersistenceService { } + public int getNumberOfAssignedFiles(String userId) { + + List files = fileRepository.findFilesByAssignee(userId); + return files.size(); + } + + public List getSoftDeletedFiles(List dossierIds) { return fileRepository.getSoftDeletedFiles(dossierIds); @@ -453,7 +463,7 @@ public class FileStatusPersistenceService { @Transactional public void softDelete(String fileId, OffsetDateTime softDeletedTime) { - fileRepository.setSoftDelete(fileId, ProcessingStatus.PROCESSED, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), softDeletedTime); + fileRepository.setSoftDelete(fileId, ProcessingStatus.PROCESSED, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), softDeletedTime); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java index 6a3b41d3b..e7a67962d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java @@ -18,6 +18,14 @@ public interface DossierRepository extends JpaRepository List findDossierChangeByLastUpdatedIsAfter(@Param("since") OffsetDateTime since); + @Query("select d from DossierEntity d where d.ownerId = :ownerId") + List findDossiersByOwnerId(@Param("ownerId") String ownerId); + + + @Query(value = "select * from DossierEntity d where JSON_CONTAINS(d.members, :memberId, '$')", nativeQuery = true) + List findDossiersByMemberId(@Param("memberId") String memberId); + + @Modifying @Query("update DossierEntity d set d.softDeletedTime = null, d.lastUpdated = :lastUpdated where d.id = :dossierId" + " and d.hardDeletedTime is null") int undelete(@Param("dossierId") String dossierId, @Param("lastUpdated") OffsetDateTime lastUpdated); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java index 16d4538b8..b7b00c339 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileRepository.java @@ -46,6 +46,10 @@ public interface FileRepository extends JpaRepository { @Param("hasUpdates") boolean hasUpdates); + @Query("select f from FileEntity f where f.assignee = :assignee") + List findFilesByAssignee(@Param("assignee") String assignee); + + @Modifying @Query(""" update FileEntity f set f.numberOfPages = :numberOfPages, \