Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4278242

Browse files
Thomasrludomikula
Thomasr
authored andcommitted
Fix: group members filtering and sorting
1 parent1daf513 commit4278242

File tree

7 files changed

+122
-11
lines changed

7 files changed

+122
-11
lines changed

‎server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/group/service/GroupMemberService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,6 @@ public interface GroupMemberService {
4141

4242
Mono<Boolean>bulkRemoveMember(StringgroupId,Collection<String>userIds);
4343

44+
Mono<List<GroupMember>>getGroupMembersByIdAndRole(StringgroupId,Stringrole);
45+
4446
}

‎server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/group/service/GroupMemberServiceImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ public Mono<List<GroupMember>> getGroupMembers(String groupId) {
3535
.collectList();
3636
}
3737

38+
@Override
39+
publicMono<List<GroupMember>>getGroupMembersByIdAndRole(StringgroupId,Stringrole) {
40+
returnbiRelationService.getBySourceIdAndRelation(GROUP_MEMBER,groupId,role)
41+
.map(GroupMember::from)
42+
.collectList();
43+
}
44+
3845
@Override
3946
publicMono<Boolean>addMember(StringorgId,StringgroupId,StringuserId,MemberRolememberRole) {
4047
returnbiRelationService.addBiRelation(GROUP_MEMBER,groupId,

‎server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ public Mono<Boolean> updateState(BiRelationBizType bizType, String sourceId, Str
185185

186186
@Override
187187
publicFlux<BiRelation>getBySourceIdAndRelation(BiRelationBizTypebizType,StringsourceId,Stringrelation) {
188+
if (relation ==null ||relation.isBlank()) {
189+
returnbiRelationRepository.findByBizTypeAndSourceId(bizType,sourceId);
190+
}
188191
Queryquery =newQuery();
189192
query.addCriteria(where(BIZ_TYPE).is(bizType));
190193
query.addCriteria(where(SOURCE_ID).is(sourceId));

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
publicinterfaceGroupApiService {
1111
Mono<GroupMemberAggregateView>getGroupMembers(StringgroupId,intpage,intcount);
1212

13+
Mono<GroupMemberAggregateView>getGroupMembersForSearch(StringgroupId,Stringsearch,Stringrole,Stringsort,Stringorder,IntegerpageNum,IntegerpageSize);
14+
1315
Mono<Boolean>addGroupMember(StringgroupId,StringnewUserId,StringroleName);
1416

1517
Mono<Boolean>updateRoleForMember(StringgroupId,UpdateRoleRequestupdateRoleRequest);

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

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,91 @@ public Mono<GroupMemberAggregateView> getGroupMembers(String groupId, int page,
111111
});
112112
}
113113

114+
@Override
115+
publicMono<GroupMemberAggregateView>getGroupMembersForSearch(StringgroupId,Stringsearch,Stringrole,Stringsort,Stringorder,IntegerpageNum,IntegerpageSize) {
116+
Mono<Tuple2<GroupMember,OrgMember>>groupAndOrgMemberInfo =getGroupAndOrgMemberInfo(groupId).cache();
117+
118+
Mono<MemberRole>visitorRoleMono =groupAndOrgMemberInfo.flatMap(tuple -> {
119+
GroupMembergroupMember =tuple.getT1();
120+
OrgMemberorgMember =tuple.getT2();
121+
if (groupMember.isSuperAdmin() ||orgMember.isSuperAdmin()) {
122+
returnMono.just(MemberRole.SUPER_ADMIN);
123+
}
124+
if (groupMember.isAdmin() ||orgMember.isAdmin()) {
125+
returnMono.just(MemberRole.ADMIN);
126+
}
127+
if (groupMember.isValid()) {
128+
returnMono.just(MemberRole.MEMBER);
129+
}
130+
returnofError(BizError.NOT_AUTHORIZED,NOT_AUTHORIZED);
131+
});
132+
133+
returngroupAndOrgMemberInfo
134+
.filter(this::hasReadPermission)
135+
.switchIfEmpty(deferredError(BizError.NOT_AUTHORIZED,NOT_AUTHORIZED))
136+
.flatMap(groupMember ->groupMemberService.getGroupMembersByIdAndRole(groupId,role))
137+
.<Pair<List<GroupMemberView>,Integer>>flatMap(members -> {
138+
if (members.isEmpty()) {
139+
returnMono.just(Pair.of(emptyList(),0));
140+
}
141+
142+
List<String>userIds =collectList(members,GroupMember::getUserId);
143+
Mono<Map<String,User>>userMapMono =userService.getByIds(userIds);
144+
returnuserMapMono.map(map -> {
145+
varlist =members.stream()
146+
.map(orgMember -> {
147+
Useruser =map.get(orgMember.getUserId());
148+
if (user ==null) {
149+
returnnull;
150+
}
151+
returnnewGroupMemberView(orgMember,user);
152+
})
153+
.filter(Objects::nonNull)
154+
.filter(view -> {
155+
if (search ==null ||search.isBlank())returntrue;
156+
returnview.getUserName() !=null &&
157+
view.getUserName().toLowerCase().contains(search.toLowerCase());
158+
})
159+
.toList();
160+
List<GroupMemberView>mutableList =newArrayList<>(list);
161+
if (sort !=null && !sort.isBlank()) {
162+
Comparator<GroupMemberView>comparator =null;
163+
if ("userName".equalsIgnoreCase(sort)) {
164+
comparator =Comparator.comparing(GroupMemberView::getUserName,Comparator.nullsLast(String::compareToIgnoreCase));
165+
}elseif ("role".equalsIgnoreCase(sort)) {
166+
comparator =Comparator.comparing(GroupMemberView::getRole,Comparator.nullsLast(String::compareToIgnoreCase));
167+
}elseif ("joinTime".equalsIgnoreCase(sort)) {
168+
comparator =Comparator.comparing(GroupMemberView::getJoinTime,Comparator.nullsLast(Long::compareTo));
169+
}
170+
if (comparator !=null &&"desc".equalsIgnoreCase(order)) {
171+
comparator =comparator.reversed();
172+
}
173+
if (comparator !=null) {
174+
mutableList.sort(comparator);
175+
}
176+
}
177+
178+
intpageTotal =mutableList.size();
179+
intfromIndex =Math.max(0, (pageNum -1) *pageSize);
180+
inttoIndex =pageSize ==0 ?pageTotal :Math.min(pageNum *pageSize,pageTotal);
181+
List<GroupMemberView>pagedList =fromIndex <toIndex ?mutableList.subList(fromIndex,toIndex) :emptyList();
182+
183+
returnPair.of(pagedList,pageTotal);
184+
});
185+
})
186+
.zipWith(visitorRoleMono)
187+
.map(tuple -> {
188+
Pair<List<GroupMemberView>,Integer>t1 =tuple.getT1();
189+
returnGroupMemberAggregateView.builder()
190+
.members(t1.getLeft())
191+
.total(t1.getRight())
192+
.pageNum(pageNum)
193+
.pageSize(pageSize)
194+
.visitorRole(tuple.getT2().getValue())
195+
.build();
196+
});
197+
}
198+
114199
privatebooleanhasReadPermission(Tuple2<GroupMember,OrgMember>tuple) {
115200
GroupMembergroupMember =tuple.getT1();
116201
OrgMemberorgMember =tuple.getT2();
@@ -366,4 +451,5 @@ public Mono<OrgMemberListView> getPotentialGroupMembers(String groupId, String s
366451
});
367452
});
368453
}
454+
369455
}

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,16 @@ public Mono<GroupListResponseView<List<GroupView>>> getOrgGroups(@RequestParam(r
116116

117117

118118
@Override
119-
publicMono<ResponseView<GroupMemberAggregateView>>getGroupMembers(@PathVariableStringgroupId,
120-
@RequestParam(required =false,defaultValue ="1")intpageNum,
121-
@RequestParam(required =false,defaultValue ="100")intpageSize) {
119+
publicMono<ResponseView<GroupMemberAggregateView>>getGroupMembers(
120+
@PathVariableStringgroupId,
121+
@RequestParam(required =false)Stringsearch,
122+
@RequestParam(required =false)Stringrole,
123+
@RequestParam(required =false)Stringsort,
124+
@RequestParam(required =false)Stringorder,
125+
@RequestParam(required =false,defaultValue ="1")IntegerpageNum,
126+
@RequestParam(required =false,defaultValue ="100")IntegerpageSize) {
122127
returngidService.convertGroupIdToObjectId(groupId).flatMap(objectId ->
123-
groupApiService.getGroupMembers(objectId,pageNum,pageSize)
128+
groupApiService.getGroupMembersForSearch(objectId,search,role,sort,order,pageNum,pageSize)
124129
.map(ResponseView::success));
125130
}
126131

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,20 @@ public Mono<GroupListResponseView<List<GroupView>>> getOrgGroups(@RequestParam(r
6868

6969
@Operation(
7070
tags =TAG_GROUP_MEMBERS,
71-
operationId ="listGroupMembers",
72-
summary ="List User Group Members",
73-
description ="Retrieve a list of Users / Members within a specific User Group in Lowcoder, showing the group's composition."
71+
operationId ="listGroupMembersWithSearchAndSort",
72+
summary ="List User Group Members with Search and Sort",
73+
description ="Retrieve apaginated, searchable, and sortablelist of Users / Members within a specific User Group in Lowcoder."
7474
)
75-
@GetMapping("/{groupId}/members")
76-
publicMono<ResponseView<GroupMemberAggregateView>>getGroupMembers(@PathVariableStringgroupId,
77-
@RequestParam(required =false,defaultValue ="1")intpageNum,
78-
@RequestParam(required =false,defaultValue ="100")intpageSize);
75+
@GetMapping("/{groupId}/members")
76+
publicMono<ResponseView<GroupMemberAggregateView>>getGroupMembers(
77+
@PathVariableStringgroupId,
78+
@RequestParam(required =false)Stringsearch,
79+
@RequestParam(required =false)Stringrole,
80+
@RequestParam(required =false)Stringsort,
81+
@RequestParam(required =false)Stringorder,
82+
@RequestParam(required =false,defaultValue ="1")IntegerpageNum,
83+
@RequestParam(required =false,defaultValue ="100")IntegerpageSize
84+
);
7985

8086
@Operation(
8187
tags =TAG_GROUP_MEMBERS,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp