Skip to content

Commit ed6d362

Browse files
committed
Modify counting logic based on org role
1 parent fcf6596 commit ed6d362

File tree

3 files changed

+22
-21
lines changed

3 files changed

+22
-21
lines changed

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

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public Mono<List<GroupView>> getGroups() {
186186
return sessionUserService.getVisitorOrgMemberCache()
187187
.flatMap(orgMember -> {
188188
String orgId = orgMember.getOrgId();
189-
Mono<Integer> orgAdminCountMono = orgMemberService.getAllOrgAdmins(orgId).map(List::size);
189+
Mono<List<OrgMember>> orgAdminsMono = orgMemberService.getAllOrgAdmins(orgId);
190190
if (orgMember.isAdmin() || orgMember.isSuperAdmin()) {
191191
MemberRole memberRole;
192192
if(orgMember.isAdmin()) {
@@ -196,44 +196,45 @@ public Mono<List<GroupView>> getGroups() {
196196
}
197197
return groupService.getByOrgId(orgId)
198198
.sort()
199-
.flatMapSequential(group -> groupMemberService.getAllGroupAdmin(group.getId())
200-
.zipWith(groupMemberService.getGroupMembers(group.getId(), 0, -1))
201-
.zipWith(orgAdminCountMono, TupleUtils::merge)
199+
.flatMapSequential(group -> groupMemberService.getGroupMembers(group.getId(), 0, -1)
200+
.zipWith(orgAdminsMono)
202201
.flatMap(tuple -> {
203-
var adminMembers = tuple.getT1();
204-
var users = tuple.getT2();
205-
var orgAdminCount = tuple.getT3();
202+
var users = tuple.getT1();
203+
var orgAdmins = tuple.getT2();
204+
var adminMembers = orgAdmins.stream().filter(orgAdmin -> users.stream().anyMatch(member -> member.getUserId().equals(orgAdmin.getUserId()))).toList();
206205
if(group.isAllUsersGroup()) {
207-
return GroupView.from(group, memberRole.getValue(), orgAdminCount, users.size());
206+
return GroupView.from(group, memberRole.getValue(), orgAdmins.size(), users.size(), users.stream().map(GroupMember::getUserId).toList());
208207
} else {
209-
return GroupView.from(group, memberRole.getValue(), adminMembers.size(), users.size());
208+
return GroupView.from(group, memberRole.getValue(), adminMembers.size(), users.size(), users.stream().map(GroupMember::getUserId).toList());
210209
}
211210
})
212211
)
213212
.collectList();
214213
}
215214
return groupMemberService.getUserGroupMembersInOrg(orgId, orgMember.getUserId())
216-
.zipWith(orgAdminCountMono)
215+
.zipWith(orgAdminsMono)
217216
.flatMap(tuple -> {
218217
List<GroupMember> groupMembers = tuple.getT1();
219-
int orgAdminCount = tuple.getT2();
218+
List<OrgMember> orgAdmins = tuple.getT2();
220219
List<String> groupIds = collectList(groupMembers, GroupMember::getGroupId);
221220
Map<String, GroupMember> groupMemberMap = collectMap(groupMembers, GroupMember::getGroupId, it -> it);
222221
return groupService.getByIds(groupIds)
223222
.sort()
224223
.flatMapSequential(group -> {
225-
var adminMembers = groupMembers.stream().filter(groupMember -> groupMember.getGroupId().equals(group.getId()) && groupMember.getRole() == MemberRole.ADMIN).toList();
226224
var allMembers = groupMembers.stream().filter(groupMember -> groupMember.getGroupId().equals(group.getId())).toList();
225+
var adminMembers = orgAdmins.stream().filter(orgAdmin -> allMembers.stream().anyMatch(member -> member.getUserId().equals(orgAdmin.getUserId()))).toList();
227226
if(group.isAllUsersGroup()) {
228227
return GroupView.from(group,
229228
groupMemberMap.get(group.getId()).getRole().getValue(),
230-
orgAdminCount,
231-
allMembers.size());
229+
orgAdmins.size(),
230+
allMembers.size(),
231+
allMembers.stream().map(GroupMember::getUserId).toList());
232232
} else {
233233
return GroupView.from(group,
234234
groupMemberMap.get(group.getId()).getRole().getValue(),
235235
adminMembers.size(),
236-
allMembers.size());
236+
allMembers.size(),
237+
allMembers.stream().map(GroupMember::getUserId).toList());
237238
}
238239
})
239240
.collectList();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class GroupController implements GroupEndpoints
5151
public Mono<ResponseView<GroupView>> create(@Valid @RequestBody CreateGroupRequest newGroup) {
5252
return groupApiService.create(newGroup)
5353
.delayUntil(group -> businessEventPublisher.publishGroupCreateEvent(group))
54-
.flatMap(group -> GroupView.from(group, MemberRole.ADMIN.getValue(), 1, 1))
54+
.flatMap(group -> GroupView.from(group, MemberRole.ADMIN.getValue(), 1, 1, List.of()))
5555
.map(ResponseView::success);
5656
}
5757

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.lowcoder.api.usermanagement.view;
22

3+
import java.util.List;
34
import java.util.Locale;
5+
import java.util.Map;
46

57
import org.lowcoder.domain.group.model.Group;
68
import org.lowcoder.sdk.util.LocaleUtils;
@@ -23,10 +25,9 @@ public class GroupView {
2325
private String dynamicRule;
2426
private boolean isSyncGroup;
2527
private boolean isSyncDelete;
26-
private int adminUserCount;
27-
private int userCount;
28+
private Map<String, Object> stats;
2829

29-
public static Mono<GroupView> from(Group group, String memberRole, int adminCount, int userCount) {
30+
public static Mono<GroupView> from(Group group, String memberRole, int adminCount, int userCount, List<String> users) {
3031
return Mono.deferContextual(contextView -> {
3132
Locale locale = LocaleUtils.getLocale(contextView);
3233
GroupView groupView = GroupView.builder()
@@ -40,8 +41,7 @@ public static Mono<GroupView> from(Group group, String memberRole, int adminCoun
4041
.dynamicRule(group.getDynamicRule())
4142
.isSyncGroup(group.isSyncGroup())
4243
.isSyncDelete(group.isSyncDeleted())
43-
.adminUserCount(adminCount)
44-
.userCount(userCount)
44+
.stats(Map.of("adminUserCount", adminCount, "userCount", userCount, "users", users))
4545
.build();
4646
return Mono.just(groupView);
4747
});

0 commit comments

Comments
 (0)