Skip to content

Commit fcf6596

Browse files
authored
Merge pull request #1283 from lowcoder-org/feature/group_api
Group API with adminUserCount & userCount
2 parents 513cd2c + 831abed commit fcf6596

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

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

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.List;
1313
import java.util.Map;
1414
import java.util.Objects;
15+
import java.util.stream.Collectors;
1516

1617
import com.github.f4b6a3.uuid.UuidCreator;
1718
import lombok.RequiredArgsConstructor;
@@ -29,12 +30,15 @@
2930
import org.lowcoder.domain.group.service.GroupService;
3031
import org.lowcoder.domain.organization.model.MemberRole;
3132
import org.lowcoder.domain.organization.model.OrgMember;
33+
import org.lowcoder.domain.organization.service.OrgMemberService;
34+
import org.lowcoder.domain.organization.service.OrganizationService;
3235
import org.lowcoder.domain.user.model.User;
3336
import org.lowcoder.domain.user.service.UserService;
3437
import org.lowcoder.infra.util.TupleUtils;
3538
import org.lowcoder.sdk.exception.BizError;
3639
import org.springframework.stereotype.Service;
3740

41+
import reactor.core.publisher.Flux;
3842
import reactor.core.publisher.Mono;
3943
import reactor.util.function.Tuple2;
4044

@@ -48,6 +52,8 @@ public class GroupApiServiceImpl implements GroupApiService {
4852
private final UserService userService;
4953
private final GroupService groupService;
5054
private final AbstractBizThresholdChecker bizThresholdChecker;
55+
private final OrganizationService organizationService;
56+
private final OrgMemberService orgMemberService;
5157

5258
@Override
5359
public Mono<GroupMemberAggregateView> getGroupMembers(String groupId, int page, int count) {
@@ -180,6 +186,7 @@ public Mono<List<GroupView>> getGroups() {
180186
return sessionUserService.getVisitorOrgMemberCache()
181187
.flatMap(orgMember -> {
182188
String orgId = orgMember.getOrgId();
189+
Mono<Integer> orgAdminCountMono = orgMemberService.getAllOrgAdmins(orgId).map(List::size);
183190
if (orgMember.isAdmin() || orgMember.isSuperAdmin()) {
184191
MemberRole memberRole;
185192
if(orgMember.isAdmin()) {
@@ -189,17 +196,46 @@ public Mono<List<GroupView>> getGroups() {
189196
}
190197
return groupService.getByOrgId(orgId)
191198
.sort()
192-
.flatMapSequential(group -> GroupView.from(group, memberRole.getValue()))
199+
.flatMapSequential(group -> groupMemberService.getAllGroupAdmin(group.getId())
200+
.zipWith(groupMemberService.getGroupMembers(group.getId(), 0, -1))
201+
.zipWith(orgAdminCountMono, TupleUtils::merge)
202+
.flatMap(tuple -> {
203+
var adminMembers = tuple.getT1();
204+
var users = tuple.getT2();
205+
var orgAdminCount = tuple.getT3();
206+
if(group.isAllUsersGroup()) {
207+
return GroupView.from(group, memberRole.getValue(), orgAdminCount, users.size());
208+
} else {
209+
return GroupView.from(group, memberRole.getValue(), adminMembers.size(), users.size());
210+
}
211+
})
212+
)
193213
.collectList();
194214
}
195215
return groupMemberService.getUserGroupMembersInOrg(orgId, orgMember.getUserId())
196-
.flatMap(groupMembers -> {
216+
.zipWith(orgAdminCountMono)
217+
.flatMap(tuple -> {
218+
List<GroupMember> groupMembers = tuple.getT1();
219+
int orgAdminCount = tuple.getT2();
197220
List<String> groupIds = collectList(groupMembers, GroupMember::getGroupId);
198221
Map<String, GroupMember> groupMemberMap = collectMap(groupMembers, GroupMember::getGroupId, it -> it);
199222
return groupService.getByIds(groupIds)
200223
.sort()
201-
.flatMapSequential(group -> GroupView.from(group,
202-
groupMemberMap.get(group.getId()).getRole().getValue()))
224+
.flatMapSequential(group -> {
225+
var adminMembers = groupMembers.stream().filter(groupMember -> groupMember.getGroupId().equals(group.getId()) && groupMember.getRole() == MemberRole.ADMIN).toList();
226+
var allMembers = groupMembers.stream().filter(groupMember -> groupMember.getGroupId().equals(group.getId())).toList();
227+
if(group.isAllUsersGroup()) {
228+
return GroupView.from(group,
229+
groupMemberMap.get(group.getId()).getRole().getValue(),
230+
orgAdminCount,
231+
allMembers.size());
232+
} else {
233+
return GroupView.from(group,
234+
groupMemberMap.get(group.getId()).getRole().getValue(),
235+
adminMembers.size(),
236+
allMembers.size());
237+
}
238+
})
203239
.collectList();
204240
});
205241
});

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()))
54+
.flatMap(group -> GroupView.from(group, MemberRole.ADMIN.getValue(), 1, 1))
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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ public class GroupView {
2323
private String dynamicRule;
2424
private boolean isSyncGroup;
2525
private boolean isSyncDelete;
26+
private int adminUserCount;
27+
private int userCount;
2628

27-
public static Mono<GroupView> from(Group group, String memberRole) {
29+
public static Mono<GroupView> from(Group group, String memberRole, int adminCount, int userCount) {
2830
return Mono.deferContextual(contextView -> {
2931
Locale locale = LocaleUtils.getLocale(contextView);
3032
GroupView groupView = GroupView.builder()
@@ -38,6 +40,8 @@ public static Mono<GroupView> from(Group group, String memberRole) {
3840
.dynamicRule(group.getDynamicRule())
3941
.isSyncGroup(group.isSyncGroup())
4042
.isSyncDelete(group.isSyncDeleted())
43+
.adminUserCount(adminCount)
44+
.userCount(userCount)
4145
.build();
4246
return Mono.just(groupView);
4347
});

0 commit comments

Comments
 (0)