Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4adcbf8

Browse files
committed
feat: support get all org-members page by page
1 parent 9a55cc3 commit 4adcbf8

File tree

9 files changed

+100
-9
lines changed

9 files changed

+100
-9
lines changed

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/organization/service/OrgMemberService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66

77
import com.openblocks.domain.organization.model.MemberRole;
88
import com.openblocks.domain.organization.model.OrgMember;
9-
import com.openblocks.infra.annotation.NonEmptyMono;
109
import com.openblocks.infra.annotation.PossibleEmptyMono;
1110

1211
import reactor.core.publisher.Flux;
1312
import reactor.core.publisher.Mono;
1413

1514
public interface OrgMemberService {
1615

17-
@NonEmptyMono
18-
Mono<List<OrgMember>> getOrganizationMembers(String orgId, int page, int count);
16+
Flux<OrgMember> getOrganizationMembers(String orgId);
17+
18+
Flux<OrgMember> getOrganizationMembers(String orgId, int page, int count);
1919

2020
Mono<OrgMember> getCurrentOrgMember(String userId);
2121

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/organization/service/OrgMemberServiceImpl.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.apache.commons.lang3.StringUtils;
1111
import org.bson.Document;
1212
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.data.domain.PageRequest;
1314
import org.springframework.stereotype.Service;
1415

1516
import com.openblocks.domain.group.model.GroupMember;
@@ -24,6 +25,7 @@
2425
import com.openblocks.infra.birelation.BiRelation;
2526
import com.openblocks.infra.birelation.BiRelationService;
2627
import com.openblocks.infra.mongo.MongoUpsertHelper;
28+
import com.openblocks.infra.util.FluxHelper;
2729
import com.openblocks.sdk.config.CommonConfig;
2830
import com.openblocks.sdk.config.CommonConfig.Workspace;
2931
import com.openblocks.sdk.constants.WorkspaceMode;
@@ -55,10 +57,15 @@ public class OrgMemberServiceImpl implements OrgMemberService {
5557
private MongoUpsertHelper mongoUpsertHelper;
5658

5759
@Override
58-
public Mono<List<OrgMember>> getOrganizationMembers(String orgId, int page, int count) {
59-
return biRelationService.getBySourceId(ORG_MEMBER, orgId)
60-
.map(OrgMember::from)
61-
.collectList();
60+
public Flux<OrgMember> getOrganizationMembers(String orgId) {
61+
return FluxHelper.getAllPageByPage(pageable -> biRelationService.getBySourceId(ORG_MEMBER, orgId, pageable), PageRequest.ofSize(100))
62+
.map(OrgMember::from);
63+
}
64+
65+
@Override
66+
public Flux<OrgMember> getOrganizationMembers(String orgId, int page, int count) {
67+
return biRelationService.getBySourceId(ORG_MEMBER, orgId, PageRequest.of(page, count))
68+
.map(OrgMember::from);
6269
}
6370

6471
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.openblocks.domain.organization.service;
2+
3+
import java.util.HashSet;
4+
import java.util.List;
5+
import java.util.Set;
6+
import java.util.stream.Collectors;
7+
import java.util.stream.IntStream;
8+
9+
import org.apache.commons.lang3.RandomUtils;
10+
import org.junit.Assert;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
import org.springframework.beans.factory.annotation.Autowired;
14+
import org.springframework.boot.test.context.SpringBootTest;
15+
import org.springframework.test.context.junit4.SpringRunner;
16+
17+
import com.openblocks.domain.organization.model.MemberRole;
18+
import com.openblocks.domain.organization.model.OrgMember;
19+
import com.openblocks.sdk.util.IDUtils;
20+
21+
import reactor.core.publisher.Mono;
22+
import reactor.test.StepVerifier;
23+
24+
@SpringBootTest
25+
@RunWith(SpringRunner.class)
26+
public class OrgMemberServiceTest {
27+
28+
@Autowired
29+
private OrgMemberService orgMemberService;
30+
31+
@Test
32+
public void testGetAllOrganizationMembers() {
33+
int totalCount = RandomUtils.nextInt(100, 500);
34+
String orgId = IDUtils.generate();
35+
Set<String> userIds = IntStream.rangeClosed(1, totalCount).mapToObj(i -> IDUtils.generate()).collect(Collectors.toSet());
36+
Mono<List<String>> listMono = orgMemberService.bulkAddMember(orgId, userIds, MemberRole.MEMBER)
37+
.thenMany(orgMemberService.getOrganizationMembers(orgId))
38+
.map(OrgMember::getUserId)
39+
.collectList();
40+
41+
StepVerifier.create(listMono)
42+
.assertNext(list -> {
43+
Assert.assertEquals(totalCount, list.size());
44+
Assert.assertEquals(userIds, new HashSet<>(list));
45+
})
46+
.verifyComplete();
47+
}
48+
}

server/api-service/openblocks-infra/src/main/java/com/openblocks/infra/birelation/BiRelationRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Collection;
44

5+
import org.springframework.data.domain.Pageable;
56
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
67

78
import reactor.core.publisher.Flux;
@@ -11,6 +12,8 @@ public interface BiRelationRepository extends ReactiveMongoRepository<BiRelation
1112

1213
Flux<BiRelation> findByBizTypeAndSourceId(BiRelationBizType bizType, String sourceId);
1314

15+
Flux<BiRelation> findByBizTypeAndSourceId(BiRelationBizType bizType, String sourceId, Pageable pageable);
16+
1417
Flux<BiRelation> findByBizTypeAndSourceIdIn(BiRelationBizType bizType, Collection<String> sourceId);
1518

1619
Flux<BiRelation> findByBizTypeAndTargetId(BiRelationBizType bizType, String targetId);

server/api-service/openblocks-infra/src/main/java/com/openblocks/infra/birelation/BiRelationService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.List;
99

1010
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.data.domain.Pageable;
1112
import org.springframework.data.mongodb.core.query.Criteria;
1213
import org.springframework.data.mongodb.core.query.Query;
1314
import org.springframework.stereotype.Service;
@@ -89,6 +90,10 @@ public Flux<BiRelation> getBySourceId(BiRelationBizType bizType, String sourceId
8990
return biRelationRepository.findByBizTypeAndSourceId(bizType, sourceId);
9091
}
9192

93+
public Flux<BiRelation> getBySourceId(BiRelationBizType bizType, String sourceId, Pageable pageable) {
94+
return biRelationRepository.findByBizTypeAndSourceId(bizType, sourceId, pageable);
95+
}
96+
9297
public Flux<BiRelation> getByTargetIds(BiRelationBizType bizType, Collection<String> targetId) {
9398
return biRelationRepository.findByBizTypeAndTargetIdIn(bizType, targetId);
9499
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.openblocks.infra.util;
2+
3+
import org.springframework.data.domain.Pageable;
4+
5+
import reactor.core.publisher.Flux;
6+
7+
public class FluxHelper {
8+
9+
public static <T> Flux<T> getAllPageByPage(PageFetcher<T> pageFetcher, Pageable first) {
10+
Flux<T> currentFluxPage = pageFetcher.fetch(first).cache();
11+
return currentFluxPage.hasElements()
12+
.flatMapMany(hasElement -> {
13+
if (hasElement) {
14+
return currentFluxPage.concatWith(getAllPageByPage(pageFetcher, first.next()));
15+
}
16+
return currentFluxPage;
17+
});
18+
}
19+
20+
public interface PageFetcher<T> {
21+
22+
Flux<T> fetch(Pageable pageable);
23+
}
24+
}

server/api-service/openblocks-plugins/restApiPlugin/src/main/java/com/openblocks/plugin/restapi/model/RestApiQueryConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
import lombok.Builder;
1818
import lombok.Getter;
19+
import lombok.extern.slf4j.Slf4j;
1920

21+
@Slf4j
2022
@Getter
2123
@Builder
2224
public class RestApiQueryConfig {
@@ -44,6 +46,7 @@ private RestApiQueryConfig(HttpMethod httpMethod, boolean disableEncodingParams,
4446
public static RestApiQueryConfig from(Map<String, Object> queryConfigs) {
4547
RestApiQueryConfig queryConfig = fromJson(toJson(queryConfigs), RestApiQueryConfig.class);
4648
if (queryConfig == null) {
49+
log.error("deserialize query config fail:{}", toJson(queryConfigs));
4750
throw new PluginException(INVALID_QUERY_SETTINGS, "INVALID_RESTAPI");
4851
}
4952
return queryConfig;

server/api-service/openblocks-server/src/main/java/com/openblocks/api/authentication/service/AuthenticationApiServiceImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,7 @@ public Mono<Boolean> disableAuthConfig(String authId) {
247247

248248
private Mono<Void> removeTokensByAuthId(String authId) {
249249
return sessionUserService.getVisitorOrgMemberCache()
250-
.flatMap(orgMember -> orgMemberService.getOrganizationMembers(orgMember.getOrgId(), 0, Integer.MAX_VALUE))
251-
.flatMapIterable(Function.identity())
250+
.flatMapMany(orgMember -> orgMemberService.getOrganizationMembers(orgMember.getOrgId()))
252251
.map(OrgMember::getUserId)
253252
.flatMap(userId -> userApiService.getTokensByAuthId(userId, authId))
254253
.delayUntil(token -> sessionUserService.removeUserSession(token))

server/api-service/openblocks-server/src/main/java/com/openblocks/api/usermanagement/OrgApiServiceImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public Mono<OrgMemberListView> getOrganizationMembers(String orgId, int page, in
8787

8888
private Mono<OrgMemberListView> getOrgMemberListView(String orgId, int page, int count) {
8989
return orgMemberService.getOrganizationMembers(orgId, page, count)
90+
.collectList()
9091
.flatMap(orgMembers -> {
9192
List<String> userIds = orgMembers.stream()
9293
.map(OrgMember::getUserId)
@@ -97,6 +98,7 @@ private Mono<OrgMemberListView> getOrgMemberListView(String orgId, int page, int
9798
.map(orgMember -> {
9899
User user = map.get(orgMember.getUserId());
99100
if (user == null) {
101+
log.warn("user {} not exist and will be removed from the result.", orgMember.getUserId());
100102
return null;
101103
}
102104
return build(user, orgMember);

0 commit comments

Comments
 (0)