RED-9393: user stats endpoint
removed some queries since they wont work because of spring acl stuff
This commit is contained in:
parent
d8c162918e
commit
1afc3623d5
@ -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<String> dossierMemberships = new ArrayList<>();
|
||||
List<String> 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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -71,6 +71,23 @@ public class DossierACLService extends AbstractACLService<String> {
|
||||
return members;
|
||||
}
|
||||
|
||||
public Set<String> getOwners(String dossierId) {
|
||||
|
||||
ObjectIdentityImpl dossierIdentity = new ObjectIdentityImpl(getIdentifier(), dossierId);
|
||||
var acl = mutableAclService.readAclById(dossierIdentity);
|
||||
Set<String> 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() {
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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<DossierEntity> getAllDossiers(List<String> dossierIds) {
|
||||
|
||||
return dossierPersistenceService.findAllDossiers(dossierIds);
|
||||
|
||||
@ -179,20 +179,6 @@ 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) {
|
||||
|
||||
if (!dossierIds.isEmpty()) {
|
||||
|
||||
@ -18,14 +18,6 @@ public interface DossierRepository extends JpaRepository<DossierEntity, String>
|
||||
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
|
||||
@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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user