From 528f1f58e07ef3cd6868a333a14ab047f900d9ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=B0=D1=83=D1=84=20=D0=9B=D0=B0=D1=82=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Fri, 21 Mar 2025 18:57:14 +0300 Subject: [PATCH] SUPPORT-9033: only backend from SUPPORT-8639 --- .../java/component/model/TreeItemDto.java | 1 + .../component/rpc/TreeItemRpcService.java | 5 +++ .../component/service/TreeItemService.java | 41 +++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/backend/src/main/java/component/model/TreeItemDto.java b/backend/src/main/java/component/model/TreeItemDto.java index eec98ff..d62eb04 100644 --- a/backend/src/main/java/component/model/TreeItemDto.java +++ b/backend/src/main/java/component/model/TreeItemDto.java @@ -12,6 +12,7 @@ public class TreeItemDto { public String label; public TreeItemDto[] children; public Object businessId; + public String domainId; public TreeItemDto(Object id, Object parentId, String label) { this.id = id; diff --git a/backend/src/main/java/component/rpc/TreeItemRpcService.java b/backend/src/main/java/component/rpc/TreeItemRpcService.java index bb9819d..a50c5a0 100644 --- a/backend/src/main/java/component/rpc/TreeItemRpcService.java +++ b/backend/src/main/java/component/rpc/TreeItemRpcService.java @@ -20,4 +20,9 @@ public class TreeItemRpcService extends Behavior { public List loadTreeData() { return treeItemService.loadTreeData(); } + + @RpcCall + public List loadTreeDataByDomainId(String token, String[] roles) { + return treeItemService.loadTreeDataByDomainId(token, roles); + } } diff --git a/backend/src/main/java/component/service/TreeItemService.java b/backend/src/main/java/component/service/TreeItemService.java index 64f4faf..d4e5b5a 100644 --- a/backend/src/main/java/component/service/TreeItemService.java +++ b/backend/src/main/java/component/service/TreeItemService.java @@ -1,6 +1,7 @@ package component.service; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -11,6 +12,9 @@ import java.util.Set; import component.model.TreeItemDto; import component.rpc.TreeItemRpcService; import database.dao.DefaultLoadDao; +import ervu_business_metrics.security.model.jwt.UserSession; +import ervu_business_metrics.security.service.ErvuJwtTokenService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import ru.cg.webbpm.modules.database.api.bean.TableRow; @@ -28,6 +32,9 @@ import ru.cg.webbpm.modules.standard_annotations.validation.NotNull; */ @Service public class TreeItemService { + @Autowired + private ErvuJwtTokenService ervuJwtTokenService; + @NotNull public DefaultLoadDao loadDao; @GraphSource(value = TreeItemRpcService.class, scanMode = GraphSource.ScanMode.SELF) @@ -42,6 +49,8 @@ public class TreeItemService { public EntityColumn labelColumn; @GraphSource(value = TreeItemRpcService.class, scanMode = GraphSource.ScanMode.SELF) public EntityColumn businessIdColumn; + @GraphSource(value = TreeItemRpcService.class, scanMode = GraphSource.ScanMode.SELF) + public EntityColumn domainIdColumn; @AdvancedProperty @GraphSource(value = TreeItemRpcService.class, scanMode = GraphSource.ScanMode.SELF) public EntityColumn sortColumn; @@ -51,11 +60,40 @@ public class TreeItemService { public List loadTreeData() { List loadedTreeItems = loadTreeItems(); + loadedTreeItems.forEach(item -> item.domainId = null); return loadedTreeItems.stream() .filter(item -> item.parentId == null) .toList(); } + public List loadTreeDataByDomainId(String token, String[] roles) { + UserSession session = ervuJwtTokenService.getUserSession(token); + boolean hasMainRole = session.roles() + .stream() + .anyMatch( + ervuRoleAuthority -> Arrays.asList(roles).contains(ervuRoleAuthority.getAuthority())); + + String domainId = session.recruitmentId(); + if (hasMainRole || domainId == null || domainIdColumn == null) { + return loadTreeData(); + } + List filteredTreeItems = loadTreeItems().stream() + .filter(item -> item.domainId.equalsIgnoreCase(domainId)) + .toList(); + filteredTreeItems.forEach(this::setDomainIdToNull); + return filteredTreeItems; + } + + private void setDomainIdToNull(TreeItemDto treeItem) { + treeItem.domainId = null; + TreeItemDto[] treeItemChildren = treeItem.children; + if (treeItemChildren != null && treeItemChildren.length > 0) { + for (TreeItemDto child : treeItemChildren) { + setDomainIdToNull(child); + } + } + } + private List loadTreeItems() { LoadOptions loadOptions = new LoadOptions(); if (sortColumn != null && sortOrder != null) { @@ -107,6 +145,9 @@ public class TreeItemService { if (businessIdColumn != null) { treeItemDto.businessId = tableRow.get(businessIdColumn); } + if (domainIdColumn != null) { + treeItemDto.domainId = String.valueOf(tableRow.get(domainIdColumn)); + } return treeItemDto; } }