Skip to content

Commit 9ca6647

Browse files
committed
Add statistic fields to group list api
1 parent ed6d362 commit 9ca6647

File tree

4 files changed

+66
-18
lines changed

4 files changed

+66
-18
lines changed

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/GroupApiServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ public Mono<List<GroupView>> getGroups() {
199199
.flatMapSequential(group -> groupMemberService.getGroupMembers(group.getId(), 0, -1)
200200
.zipWith(orgAdminsMono)
201201
.flatMap(tuple -> {
202-
var users = tuple.getT1();
202+
var users = tuple.getT1().stream().filter(user -> user.getRole() != MemberRole.SUPER_ADMIN).toList();
203203
var orgAdmins = tuple.getT2();
204204
var adminMembers = orgAdmins.stream().filter(orgAdmin -> users.stream().anyMatch(member -> member.getUserId().equals(orgAdmin.getUserId()))).toList();
205205
if(group.isAllUsersGroup()) {
@@ -221,7 +221,7 @@ public Mono<List<GroupView>> getGroups() {
221221
return groupService.getByIds(groupIds)
222222
.sort()
223223
.flatMapSequential(group -> {
224-
var allMembers = groupMembers.stream().filter(groupMember -> groupMember.getGroupId().equals(group.getId())).toList();
224+
var allMembers = groupMembers.stream().filter(groupMember -> groupMember.getGroupId().equals(group.getId()) && groupMember.getRole() != MemberRole.SUPER_ADMIN).toList();
225225
var adminMembers = orgAdmins.stream().filter(orgAdmin -> allMembers.stream().anyMatch(member -> member.getUserId().equals(orgAdmin.getUserId()))).toList();
226226
if(group.isAllUsersGroup()) {
227227
return GroupView.from(group,

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/GroupController.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,15 @@
99
import org.apache.commons.lang3.StringUtils;
1010
import org.lowcoder.api.framework.view.ResponseView;
1111
import org.lowcoder.api.home.SessionUserService;
12-
import org.lowcoder.api.usermanagement.view.AddMemberRequest;
13-
import org.lowcoder.api.usermanagement.view.CreateGroupRequest;
14-
import org.lowcoder.api.usermanagement.view.GroupMemberAggregateView;
15-
import org.lowcoder.api.usermanagement.view.GroupView;
16-
import org.lowcoder.api.usermanagement.view.UpdateGroupRequest;
17-
import org.lowcoder.api.usermanagement.view.UpdateRoleRequest;
12+
import org.lowcoder.api.usermanagement.view.*;
1813
import org.lowcoder.api.util.BusinessEventPublisher;
1914
import org.lowcoder.api.util.GidService;
15+
import org.lowcoder.domain.group.model.GroupMember;
2016
import org.lowcoder.domain.group.service.GroupMemberService;
2117
import org.lowcoder.domain.group.service.GroupService;
2218
import org.lowcoder.domain.organization.model.MemberRole;
19+
import org.lowcoder.domain.organization.model.OrgMember;
20+
import org.lowcoder.domain.organization.service.OrgMemberService;
2321
import org.lowcoder.sdk.exception.BizError;
2422
import org.springframework.beans.factory.annotation.Autowired;
2523
import org.springframework.web.bind.annotation.PathVariable;
@@ -46,6 +44,8 @@ public class GroupController implements GroupEndpoints
4644
private GroupService groupService;
4745
@Autowired
4846
private GidService gidService;
47+
@Autowired
48+
private OrgMemberService orgMemberService;
4949

5050
@Override
5151
public Mono<ResponseView<GroupView>> create(@Valid @RequestBody CreateGroupRequest newGroup) {
@@ -75,9 +75,40 @@ public Mono<ResponseView<Boolean>> delete(@PathVariable String groupId) {
7575
}
7676

7777
@Override
78-
public Mono<ResponseView<List<GroupView>>> getOrgGroups() {
79-
return groupApiService.getGroups()
80-
.map(ResponseView::success);
78+
public Mono<GroupListResponseView<List<GroupView>>> getOrgGroups() {
79+
return groupApiService.getGroups().flatMap(groupList -> {
80+
if(groupList.isEmpty()) return Mono.just(new GroupListResponseView<>(ResponseView.SUCCESS,
81+
"", List.of(), 0, 0, 0, 0));
82+
return sessionUserService.getVisitorOrgMemberCache()
83+
.map(OrgMember::getOrgId)
84+
.flatMap(orgId -> orgMemberService.getOrganizationMembers(orgId)
85+
.collectList()
86+
.zipWith(groupService.getDevGroup(orgId).flatMap(devGroup -> groupMemberService.getGroupMembers(devGroup.getId(), 0, -1)))
87+
.map(tuple -> {
88+
List<OrgMember> orgMembers = tuple.getT1();
89+
List<GroupMember> devMembers = tuple.getT2();
90+
int totalAdmins = orgMembers.stream().filter(OrgMember::isAdmin).toList().size();
91+
int totalAdminsAndDevelopers = orgMembers.stream()
92+
.filter(orgMember -> orgMember.isAdmin() ||
93+
devMembers.stream().anyMatch(devMember -> devMember.getUserId().equals(orgMember.getUserId()))).toList().size();
94+
int totalDevelopersOnly = orgMembers.stream()
95+
.filter(orgMember -> !orgMember.isAdmin() && !orgMember.isSuperAdmin() &&
96+
devMembers.stream().anyMatch(devMember -> devMember.getUserId().equals(orgMember.getUserId()))).toList().size();
97+
int totalOtherMembers = orgMembers.stream()
98+
.filter(orgMember -> !orgMember.isAdmin() && !orgMember.isSuperAdmin() &&
99+
devMembers.stream().noneMatch(devMember -> devMember.getUserId().equals(orgMember.getUserId()))).toList().size();
100+
101+
return new GroupListResponseView<>(ResponseView.SUCCESS,
102+
"",
103+
groupList,
104+
totalAdmins,
105+
totalAdminsAndDevelopers,
106+
totalDevelopersOnly,
107+
totalOtherMembers);
108+
})
109+
);
110+
}
111+
);
81112
}
82113

83114

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/GroupEndpoints.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,7 @@
55
import jakarta.validation.Valid;
66

77
import org.lowcoder.api.framework.view.ResponseView;
8-
import org.lowcoder.api.usermanagement.view.AddMemberRequest;
9-
import org.lowcoder.api.usermanagement.view.CreateGroupRequest;
10-
import org.lowcoder.api.usermanagement.view.GroupMemberAggregateView;
11-
import org.lowcoder.api.usermanagement.view.GroupView;
12-
import org.lowcoder.api.usermanagement.view.UpdateGroupRequest;
13-
import org.lowcoder.api.usermanagement.view.UpdateRoleRequest;
8+
import org.lowcoder.api.usermanagement.view.*;
149
import org.lowcoder.infra.constant.NewUrl;
1510
import org.lowcoder.infra.constant.Url;
1611
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -68,7 +63,7 @@ public Mono<ResponseView<Boolean>> update(@PathVariable String groupId,
6863
description = "Retrieve a list of User Groups within Lowcoder, providing an overview of available groups, based on the access rights of the currently impersonated User."
6964
)
7065
@GetMapping("/list")
71-
public Mono<ResponseView<List<GroupView>>> getOrgGroups();
66+
public Mono<GroupListResponseView<List<GroupView>>> getOrgGroups();
7267

7368
@Operation(
7469
tags = TAG_GROUP_MEMBERS,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.lowcoder.api.usermanagement.view;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import lombok.Getter;
5+
import org.lowcoder.api.framework.view.ResponseView;
6+
import org.lowcoder.sdk.exception.BizError;
7+
8+
@JsonInclude(JsonInclude.Include.NON_NULL)
9+
@Getter
10+
public class GroupListResponseView<T> extends ResponseView<T> {
11+
private final int totalAdminsAndDevelopers;
12+
private final int totalDevelopersOnly;
13+
private final int totalAdmins;
14+
private final int totalOtherMembers;
15+
public GroupListResponseView(int code, String message, T data, int totalAdmins, int totalAdminsAndDevelopers, int totalDevelopersOnly, int totalOtherMembers) {
16+
super(code, message, data);
17+
this.totalAdmins = totalAdmins;
18+
this.totalDevelopersOnly = totalDevelopersOnly;
19+
this.totalAdminsAndDevelopers = totalAdminsAndDevelopers;
20+
this.totalOtherMembers = totalOtherMembers;
21+
}
22+
}

0 commit comments

Comments
 (0)