Skip to content

Commit 3cefa1f

Browse files
committed
Fixed pagination for myorg endpoint.
1 parent 6db11bc commit 3cefa1f

File tree

4 files changed

+53
-14
lines changed

4 files changed

+53
-14
lines changed

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import org.lowcoder.domain.organization.model.OrganizationState;
77
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
88
import org.springframework.stereotype.Repository;
9+
import org.springframework.data.domain.Pageable;
10+
import java.util.List;
911

1012
import reactor.core.publisher.Flux;
1113
import reactor.core.publisher.Mono;
@@ -31,4 +33,7 @@ public interface OrganizationRepository extends ReactiveMongoRepository<Organiza
3133

3234
Flux<Organization> findByOrganizationDomainIsNotNull();
3335
Mono<Boolean> existsBySlug(String slug);
36+
37+
Flux<Organization> findByIdInAndNameContainingIgnoreCase(List<String> ids, String name, Pageable pageable);
38+
Mono<Long> countByIdInAndNameContainingIgnoreCase(List<String> ids, String name);
3439
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.lowcoder.infra.annotation.NonEmptyMono;
99
import org.lowcoder.infra.annotation.PossibleEmptyMono;
1010
import org.springframework.http.codec.multipart.Part;
11+
import org.springframework.data.domain.Pageable;
1112

1213
import reactor.core.publisher.Flux;
1314
import reactor.core.publisher.Mono;
@@ -52,4 +53,7 @@ public interface OrganizationService {
5253
Mono<Boolean> updateCommonSettings(String orgId, String key, Object value);
5354

5455
Mono<Organization> updateSlug(String organizationId, String newSlug);
56+
57+
Flux<Organization> findUserOrgs(String userId, String orgName, Pageable pageable);
58+
Mono<Long> countUserOrgs(String userId, String orgName);
5559
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import org.lowcoder.domain.user.repository.UserRepository;
1919
import org.lowcoder.domain.util.SlugUtils;
2020
import org.lowcoder.infra.annotation.PossibleEmptyMono;
21+
import org.lowcoder.infra.birelation.BiRelationService;
22+
import org.lowcoder.infra.birelation.BiRelation;
2123
import org.lowcoder.infra.mongo.MongoUpsertHelper;
2224
import org.lowcoder.sdk.config.CommonConfig;
2325
import org.lowcoder.sdk.config.dynamic.Conf;
@@ -31,6 +33,7 @@
3133
import org.springframework.data.mongodb.core.query.Update;
3234
import org.springframework.http.codec.multipart.Part;
3335
import org.springframework.stereotype.Service;
36+
import org.springframework.data.domain.Pageable;
3437
import reactor.core.publisher.Flux;
3538
import reactor.core.publisher.Mono;
3639

@@ -41,6 +44,7 @@
4144
import static org.lowcoder.domain.organization.model.OrganizationState.DELETED;
4245
import static org.lowcoder.domain.util.QueryDslUtils.fieldName;
4346
import static org.lowcoder.sdk.exception.BizError.UNABLE_TO_FIND_VALID_ORG;
47+
import static org.lowcoder.infra.birelation.BiRelationBizType.ORG_MEMBER;
4448
import static org.lowcoder.sdk.util.ExceptionUtils.deferredError;
4549
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
4650
import static org.lowcoder.sdk.util.LocaleUtils.getLocale;
@@ -62,6 +66,7 @@ public class OrganizationServiceImpl implements OrganizationService {
6266
private final ApplicationContext applicationContext;
6367
private final CommonConfig commonConfig;
6468
private final ConfigCenter configCenter;
69+
private final BiRelationService biRelationService;
6570

6671
@PostConstruct
6772
private void init()
@@ -315,4 +320,31 @@ public Mono<Organization> updateSlug(String organizationId, String newSlug) {
315320
});
316321
});
317322
}
323+
324+
@Override
325+
public Flux<Organization> findUserOrgs(String userId, String orgName, Pageable pageable) {
326+
return biRelationService.getByTargetId(ORG_MEMBER, userId)
327+
.map(BiRelation::getSourceId)
328+
.collectList()
329+
.flatMapMany(orgIds -> {
330+
if (orgIds.isEmpty()) {
331+
return Flux.empty();
332+
}
333+
return repository.findByIdInAndNameContainingIgnoreCase(orgIds, orgName, pageable);
334+
});
335+
}
336+
337+
@Override
338+
public Mono<Long> countUserOrgs(String userId, String orgName) {
339+
String filter = orgName == null ? "" : orgName;
340+
return biRelationService.getByTargetId(ORG_MEMBER, userId)
341+
.map(BiRelation::getSourceId)
342+
.collectList()
343+
.flatMap(orgIds -> {
344+
if (orgIds.isEmpty()) {
345+
return Mono.just(0L);
346+
}
347+
return repository.countByIdInAndNameContainingIgnoreCase(orgIds, filter);
348+
});
349+
}
318350
}

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

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import org.springframework.http.codec.multipart.Part;
2828
import org.springframework.web.bind.annotation.*;
2929
import org.springframework.web.server.ServerWebExchange;
30+
import org.springframework.data.domain.Pageable;
31+
import org.springframework.data.domain.PageRequest;
32+
3033
import reactor.core.publisher.Flux;
3134
import reactor.core.publisher.Mono;
3235

@@ -77,20 +80,15 @@ public Mono<ResponseView<?>> getUserOrgs(ServerWebExchange exchange,
7780
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
7881
return sessionUserService.getVisitor()
7982
.flatMap(user -> {
80-
Flux<OrgMember> orgMemberFlux = orgMemberService.getAllActiveOrgs(user.getId());
81-
82-
Flux<OrgView> orgViewFlux = orgMemberFlux
83-
.flatMap(orgMember -> organizationService.getById(orgMember.getOrgId()))
84-
.filter(org -> StringUtils.isBlank(orgName) || StringUtils.containsIgnoreCase(org.getName(), orgName))
85-
.map(OrgView::new);
86-
87-
return orgViewFlux.collectList().map(orgs -> {
88-
int total = orgs.size();
89-
int fromIndex = Math.max((pageNum - 1) * pageSize, 0);
90-
int toIndex = Math.min(fromIndex + pageSize, total);
91-
List<OrgView> pagedOrgs = fromIndex < toIndex ? orgs.subList(fromIndex, toIndex) : List.of();
92-
return PageResponseView.success(pagedOrgs, pageNum, pageSize, total);
93-
});
83+
Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
84+
String filter = orgName == null ? "" : orgName;
85+
return organizationService.findUserOrgs(user.getId(), filter, pageable)
86+
.map(OrgView::new)
87+
.collectList()
88+
.zipWith(organizationService.countUserOrgs(user.getId(), filter))
89+
.map(tuple -> PageResponseView.success(
90+
tuple.getT1(), pageNum, pageSize, tuple.getT2().intValue()
91+
));
9492
})
9593
.map(ResponseView::success);
9694
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy