RED-9393: user stats endpoint
added queries
This commit is contained in:
parent
e114291f56
commit
d8c162918e
@ -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 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.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
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.DossierService;
|
||||||
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.management.v1.processor.service.users.UserService;
|
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 + "')")
|
@PreAuthorize("hasAuthority('" + READ_USER_STATS + "')")
|
||||||
public UserStats getUserStats(String userId) {
|
public UserStats getUserStats(String userId) {
|
||||||
|
|
||||||
if (!userService.getUserById(userId).isEmpty()) {
|
if (userService.getUserById(userId).isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
List<DossierEntity> allDossiers = dossierService.getAllDossiers();
|
return new UserStats(this.dossierService.getNumberOfDossierMemberships(userId),
|
||||||
List<FileEntity> allFiles = fileStatusPersistenceService.getAllFiles()
|
this.dossierService.getNumberOfDossierOwnerships(userId),
|
||||||
.stream()
|
this.fileStatusPersistenceService.getNumberOfAssignedFiles(userId));
|
||||||
.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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,17 @@ import java.util.HashSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
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.CascadeType;
|
||||||
import jakarta.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import jakarta.persistence.Convert;
|
import jakarta.persistence.Convert;
|
||||||
@ -19,18 +30,6 @@ import jakarta.persistence.ManyToMany;
|
|||||||
import jakarta.persistence.ManyToOne;
|
import jakarta.persistence.ManyToOne;
|
||||||
import jakarta.persistence.OneToMany;
|
import jakarta.persistence.OneToMany;
|
||||||
import jakarta.persistence.Table;
|
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.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|||||||
@ -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<DossierEntity> getAllDossiers(List<String> dossierIds) {
|
public List<DossierEntity> getAllDossiers(List<String> dossierIds) {
|
||||||
|
|
||||||
return dossierPersistenceService.findAllDossiers(dossierIds);
|
return dossierPersistenceService.findAllDossiers(dossierIds);
|
||||||
|
|||||||
@ -179,6 +179,20 @@ public class DossierPersistenceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getNumberOfDossierOwnerships(String userId) {
|
||||||
|
|
||||||
|
List<DossierEntity> dossiers = dossierRepository.findDossiersByOwnerId(userId);
|
||||||
|
return dossiers.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getNumberOfDossierMemberships(String userId) {
|
||||||
|
|
||||||
|
List<DossierEntity> dossiers = dossierRepository.findDossiersByMemberId(userId);
|
||||||
|
return dossiers.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<DossierEntity> findAllDossiers(List<String> dossierIds) {
|
public List<DossierEntity> findAllDossiers(List<String> dossierIds) {
|
||||||
|
|
||||||
if (!dossierIds.isEmpty()) {
|
if (!dossierIds.isEmpty()) {
|
||||||
|
|||||||
@ -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.FileIdentifier;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.model.OCRStatusUpdateResponse;
|
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.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.FileAttributesRepository;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
|
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.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.component.ComponentMappingMetadata;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileErrorInfo;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileErrorInfo;
|
||||||
@ -403,7 +403,10 @@ public class FileStatusPersistenceService {
|
|||||||
public List<FileEntity> getStatusesForDossierTemplate(String dossierTemplateId) {
|
public List<FileEntity> getStatusesForDossierTemplate(String dossierTemplateId) {
|
||||||
|
|
||||||
return dossierService.findAllDossiersForDossierTemplateId(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<FileEntity> files = fileRepository.findFilesByAssignee(userId);
|
||||||
|
return files.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<FileEntity> getSoftDeletedFiles(List<String> dossierIds) {
|
public List<FileEntity> getSoftDeletedFiles(List<String> dossierIds) {
|
||||||
|
|
||||||
return fileRepository.getSoftDeletedFiles(dossierIds);
|
return fileRepository.getSoftDeletedFiles(dossierIds);
|
||||||
@ -453,7 +463,7 @@ public class FileStatusPersistenceService {
|
|||||||
@Transactional
|
@Transactional
|
||||||
public void softDelete(String fileId, OffsetDateTime softDeletedTime) {
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -18,6 +18,14 @@ public interface DossierRepository extends JpaRepository<DossierEntity, String>
|
|||||||
List<String> findDossierChangeByLastUpdatedIsAfter(@Param("since") OffsetDateTime since);
|
List<String> findDossierChangeByLastUpdatedIsAfter(@Param("since") OffsetDateTime since);
|
||||||
|
|
||||||
|
|
||||||
|
@Query("select d from DossierEntity d where d.ownerId = :ownerId")
|
||||||
|
List<DossierEntity> findDossiersByOwnerId(@Param("ownerId") String ownerId);
|
||||||
|
|
||||||
|
|
||||||
|
@Query(value = "select * from DossierEntity d where JSON_CONTAINS(d.members, :memberId, '$')", nativeQuery = true)
|
||||||
|
List<DossierEntity> findDossiersByMemberId(@Param("memberId") String memberId);
|
||||||
|
|
||||||
|
|
||||||
@Modifying
|
@Modifying
|
||||||
@Query("update DossierEntity d set d.softDeletedTime = null, d.lastUpdated = :lastUpdated where d.id = :dossierId" + " and d.hardDeletedTime is null")
|
@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);
|
int undelete(@Param("dossierId") String dossierId, @Param("lastUpdated") OffsetDateTime lastUpdated);
|
||||||
|
|||||||
@ -46,6 +46,10 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
|||||||
@Param("hasUpdates") boolean hasUpdates);
|
@Param("hasUpdates") boolean hasUpdates);
|
||||||
|
|
||||||
|
|
||||||
|
@Query("select f from FileEntity f where f.assignee = :assignee")
|
||||||
|
List<FileEntity> findFilesByAssignee(@Param("assignee") String assignee);
|
||||||
|
|
||||||
|
|
||||||
@Modifying
|
@Modifying
|
||||||
@Query("""
|
@Query("""
|
||||||
update FileEntity f set f.numberOfPages = :numberOfPages, \
|
update FileEntity f set f.numberOfPages = :numberOfPages, \
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user