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 916b0aba4..43f7aac23 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 @@ -1,10 +1,11 @@ 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.ArrayList; +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.acl.custom.dossier.DossierACLService; 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; @@ -22,18 +23,29 @@ public class UserStatsController implements UserStatsResource { private final UserService userService; private final DossierService dossierService; private final FileStatusPersistenceService fileStatusPersistenceService; + private final DossierACLService dossierACLService; @Override - @PreAuthorize("hasAuthority('" + READ_USER_STATS + "')") public UserStats getUserStats(String userId) { if (userService.getUserById(userId).isEmpty()) { return null; } - return new UserStats(this.dossierService.getNumberOfDossierMemberships(userId), - this.dossierService.getNumberOfDossierOwnerships(userId), - this.fileStatusPersistenceService.getNumberOfAssignedFiles(userId)); + List dossierMemberships = new ArrayList<>(); + List dossierOwnerships = new ArrayList<>(); + dossierService.getAllDossiers() + .stream() + .forEach(d -> { + if (dossierACLService.getMembers(d.getId()).contains(userId)) { + dossierMemberships.add(d.getId()); + } + if (dossierACLService.getOwners(d.getId()).contains(userId)) { + dossierOwnerships.add(d.getId()); + } + }); + + return new UserStats(dossierMemberships.size(), dossierOwnerships.size(), 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/acl/custom/dossier/DossierACLService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java index b60076a01..b0abc0fb2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java @@ -71,6 +71,23 @@ public class DossierACLService extends AbstractACLService { return members; } + public Set getOwners(String dossierId) { + + ObjectIdentityImpl dossierIdentity = new ObjectIdentityImpl(getIdentifier(), dossierId); + var acl = mutableAclService.readAclById(dossierIdentity); + Set members = new HashSet<>(); + acl.getEntries() + .forEach(entry -> { + if (entry.getSid() instanceof PrincipalSid) { + var principal = ((PrincipalSid) entry.getSid()).getPrincipal(); + if (entry.getPermission().getMask() == RedPermission.OWNER.getMask()) { + members.add(principal); + } + } + }); + return members; + } + @Override public String getIdentifier() { 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 b0886bc76..e0bd18fe9 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 @@ -20,6 +20,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Convert; +import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; 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 348393251..8a18c26d4 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,18 +142,6 @@ 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 65f556b5a..a4e10a712 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,20 +179,6 @@ 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/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 e7a67962d..6a3b41d3b 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,14 +18,6 @@ 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);