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

Commit6d4cd53

Browse files
Thomasrludomikula
Thomasr
authored andcommitted
fixed orgmembers with searchMemberName and searchGroupId
1 parent5396230 commit6d4cd53

File tree

4 files changed

+110
-1
lines changed

4 files changed

+110
-1
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,7 @@ public interface OrgApiService {
5353
Mono<ConfigView>getOrganizationConfigs(StringorgId);
5454

5555
Mono<Long>getApiUsageCount(StringorgId,BooleanlastMonthOnly);
56+
57+
Mono<OrgMemberListView>getOrganizationMembersForSearch(StringorgId,StringsearchMemberName,StringsearchGroupId,IntegerpageNum,IntegerpageSize);
5658
}
5759

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

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
importorg.springframework.http.codec.multipart.Part;
4141
importorg.springframework.stereotype.Service;
4242
importreactor.core.publisher.Mono;
43+
importreactor.core.publisher.Flux;
44+
importorg.lowcoder.domain.group.service.GroupMemberService;
45+
importorg.lowcoder.domain.group.model.GroupMember;
4346

4447
importjava.util.*;
4548
importjava.util.stream.Collectors;
@@ -49,6 +52,8 @@
4952
importstaticorg.lowcoder.sdk.util.ExceptionUtils.deferredError;
5053
importstaticorg.lowcoder.sdk.util.ExceptionUtils.ofError;
5154
importstaticorg.lowcoder.sdk.util.StreamUtils.collectSet;
55+
importreactor.util.function.Tuple2;
56+
importreactor.util.function.Tuples;
5257

5358
@Slf4j
5459
@Service
@@ -72,9 +77,10 @@ public class OrgApiServiceImpl implements OrgApiService {
7277
privateGroupServicegroupService;
7378
@Autowired
7479
privateAuthenticationServiceauthenticationService;
75-
7680
@Autowired
7781
privateServerLogServiceserverLogService;
82+
@Autowired
83+
privateGroupMemberServicegroupMemberService;
7884

7985
@Override
8086
publicMono<OrgMemberListView>getOrganizationMembers(StringorgId,intpage,intcount) {
@@ -84,6 +90,78 @@ public Mono<OrgMemberListView> getOrganizationMembers(String orgId, int page, in
8490
.then(getOrgMemberListView(orgId,page,count));
8591
}
8692

93+
// Update getOrgMemberListViewForSearch to filter by group membership
94+
privateMono<OrgMemberListView>getOrgMemberListViewForSearch(StringorgId,StringsearchMemberName,StringsearchGroupId,Integerpage,IntegerpageSize) {
95+
returnorgMemberService.getOrganizationMembers(orgId)
96+
.collectList()
97+
.flatMap(orgMembers -> {
98+
List<String>userIds =orgMembers.stream()
99+
.map(OrgMember::getUserId)
100+
.collect(Collectors.toList());
101+
Mono<Map<String,User>>users =userService.getByIds(userIds);
102+
103+
// If searchGroupId is provided, fetch group members
104+
Mono<Set<String>>groupUserIdsMono =StringUtils.isBlank(searchGroupId)
105+
?Mono.just(Collections.emptySet())
106+
:groupMemberService.getGroupMembers(searchGroupId)
107+
.map(list ->list.stream()
108+
.map(GroupMember::getUserId)
109+
.collect(Collectors.toSet()));
110+
111+
returnMono.zip(users,groupUserIdsMono)
112+
.map(tuple -> {
113+
Map<String,User>userMap =tuple.getT1();
114+
Set<String>groupUserIds =tuple.getT2();
115+
116+
varlist =orgMembers.stream()
117+
.map(orgMember -> {
118+
Useruser =userMap.get(orgMember.getUserId());
119+
if (user ==null) {
120+
log.warn("user {} not exist and will be removed from the result.",orgMember.getUserId());
121+
returnnull;
122+
}
123+
returnbuildOrgMemberView(user,orgMember);
124+
})
125+
.filter(Objects::nonNull)
126+
.filter(orgMemberView -> {
127+
// Filter by name
128+
booleanmatchesName =StringUtils.isBlank(searchMemberName) ||
129+
StringUtils.containsIgnoreCase(orgMemberView.getName(),searchMemberName);
130+
131+
// Filter by group
132+
booleanmatchesGroup =StringUtils.isBlank(searchGroupId) ||
133+
groupUserIds.contains(orgMemberView.getUserId());
134+
135+
returnmatchesName &&matchesGroup;
136+
})
137+
.collect(Collectors.toList());
138+
varpageTotal =list.size();
139+
list =list.subList((page -1) *pageSize,pageSize ==0 ?pageTotal :Math.min(page *pageSize,pageTotal));
140+
returnPair.of(list,pageTotal);
141+
});
142+
})
143+
.zipWith(sessionUserService.getVisitorOrgMemberCache())
144+
.map(tuple -> {
145+
List<OrgMemberView>memberViews =tuple.getT1().getLeft();
146+
varpageTotal =tuple.getT1().getRight();
147+
OrgMemberorgMember =tuple.getT2();
148+
returnOrgMemberListView.builder()
149+
.members(memberViews)
150+
.total(pageTotal)
151+
.pageNum(page)
152+
.pageSize(pageSize)
153+
.visitorRole(orgMember.getRole().getValue())
154+
.build();
155+
});
156+
}
157+
@Override
158+
publicMono<OrgMemberListView>getOrganizationMembersForSearch(StringorgId,StringsearchMemberName,StringsearchGroupId,Integerpage,IntegerpageSize) {
159+
returnsessionUserService.getVisitorId()
160+
.flatMap(visitorId ->orgMemberService.getOrgMember(orgId,visitorId))
161+
.switchIfEmpty(deferredError(BizError.NOT_AUTHORIZED,"NOT_AUTHORIZED"))
162+
.then(getOrgMemberListViewForSearch(orgId,searchMemberName,searchGroupId,page,pageSize));
163+
}
164+
87165
privateMono<OrgMemberListView>getOrgMemberListView(StringorgId,intpage,intcount) {
88166
returnorgMemberService.getOrganizationMembers(orgId)
89167
.collectList()
@@ -136,6 +214,17 @@ protected OrgMemberView build(User user, OrgMember orgMember) {
136214
.rawUserInfos(findRawUserInfos(user,orgId))
137215
.build();
138216
}
217+
protectedOrgMemberViewbuildOrgMemberView(Useruser,OrgMemberorgMember) {
218+
StringorgId =orgMember.getOrgId();
219+
returnOrgMemberView.builder()
220+
.name(user.getName())
221+
.userId(user.getId())
222+
.role(orgMember.getRole().getValue())
223+
.avatarUrl(user.getAvatarUrl())
224+
.joinTime(orgMember.getJoinTime())
225+
.rawUserInfos(findRawUserInfos(user,orgId))
226+
.build();
227+
}
139228

140229
protectedMap<String,Map<String,Object>>findRawUserInfos(Useruser,StringorgId) {
141230
returnSetUtils.emptyIfNull(user.getConnections())

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
importorg.lowcoder.api.usermanagement.view.UpdateRoleRequest;
1313
importorg.lowcoder.api.util.BusinessEventPublisher;
1414
importorg.lowcoder.api.util.GidService;
15+
importorg.lowcoder.domain.organization.model.OrgMember;
1516
importorg.lowcoder.domain.organization.model.Organization;
1617
importorg.lowcoder.domain.organization.model.Organization.OrganizationCommonSettings;
1718
importorg.lowcoder.domain.organization.service.OrgMemberService;
@@ -117,6 +118,16 @@ public Mono<ResponseView<OrgMemberListView>> getOrgMembers(@PathVariable String
117118
orgApiService.getOrganizationMembers(id,pageNum,pageSize)
118119
.map(ResponseView::success));
119120
}
121+
@Override
122+
publicMono<ResponseView<OrgMemberListView>>getOrgMembersForSearch(@PathVariableStringorgId,
123+
@PathVariableStringsearchMemberName,
124+
@PathVariableStringsearchGroupId,
125+
@RequestParam(required =false,defaultValue ="1")intpageNum,
126+
@RequestParam(required =false,defaultValue ="1000")intpageSize) {
127+
returngidService.convertOrganizationIdToObjectId(orgId).flatMap(id ->
128+
orgApiService.getOrganizationMembersForSearch(id,searchMemberName,searchGroupId,pageNum,pageSize)
129+
.map(ResponseView::success));
130+
}
120131

121132
@Override
122133
publicMono<ResponseView<Boolean>>updateRoleForMember(@RequestBodyUpdateRoleRequestupdateRoleRequest,

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,13 @@ public Mono<ResponseView<OrgMemberListView>> getOrgMembers(@PathVariable String
9898
@RequestParam(required =false,defaultValue ="1")intpageNum,
9999
@RequestParam(required =false,defaultValue ="1000")intpageSize);
100100

101+
@GetMapping("/{orgId}/{searchMemberName}/{searchGroupId}/members")
102+
publicMono<ResponseView<OrgMemberListView>>getOrgMembersForSearch(@PathVariableStringorgId,
103+
@PathVariableStringsearchMemberName,
104+
@PathVariableStringsearchGroupId,
105+
@RequestParam(required =false,defaultValue ="1")intpageNum,
106+
@RequestParam(required =false,defaultValue ="1000")intpageSize);
107+
101108
@Operation(
102109
tags =TAG_ORGANIZATION_MEMBERS,
103110
operationId ="updateOrganizationMemberRole",

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp