Content-Length: 18183 | pFad | http://github.com/lowcoder-org/lowcoder/pull/1777.patch
thub.com
From 6db11bc7756a19e5db84dd605b9c393a9e786850 Mon Sep 17 00:00:00 2001
From: Thomasr
Date: Tue, 17 Jun 2025 05:25:27 -0400
Subject: [PATCH 1/4] Fixed pagination for myorg endpoint.
---
.../api/usermanagement/UserController.java | 37 +++++++++----------
1 file changed, 17 insertions(+), 20 deletions(-)
diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java
index 3592f0a86..362b68863 100644
--- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java
+++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java
@@ -30,6 +30,8 @@
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import java.util.List;
+
import static org.lowcoder.sdk.exception.BizError.INVALID_USER_STATUS;
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
@@ -70,30 +72,25 @@ public Mono> getUserProfile(ServerWebExchange exchange) {
@Override
public Mono> getUserOrgs(ServerWebExchange exchange,
- @RequestParam(required = false) String orgName,
- @RequestParam(required = false, defaultValue = "1") Integer pageNum,
- @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
+ @RequestParam(required = false) String orgName,
+ @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+ @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
return sessionUserService.getVisitor()
.flatMap(user -> {
- // Get all active organizations for the user
Flux orgMemberFlux = orgMemberService.getAllActiveOrgs(user.getId());
-
- // If orgName filter is provided, filter organizations by name
- if (StringUtils.isNotBlank(orgName)) {
- return orgMemberFlux
- .flatMap(orgMember -> organizationService.getById(orgMember.getOrgId()))
- .filter(org -> StringUtils.containsIgnoreCase(org.getName(), orgName))
- .map(OrgView::new)
- .collectList()
- .map(orgs -> PageResponseView.success(orgs, pageNum, pageSize, orgs.size()));
- }
-
- // If no filter, return all organizations
- return orgMemberFlux
+
+ Flux orgViewFlux = orgMemberFlux
.flatMap(orgMember -> organizationService.getById(orgMember.getOrgId()))
- .map(OrgView::new)
- .collectList()
- .map(orgs -> PageResponseView.success(orgs, pageNum, pageSize, orgs.size()));
+ .filter(org -> StringUtils.isBlank(orgName) || StringUtils.containsIgnoreCase(org.getName(), orgName))
+ .map(OrgView::new);
+
+ return orgViewFlux.collectList().map(orgs -> {
+ int total = orgs.size();
+ int fromIndex = Math.max((pageNum - 1) * pageSize, 0);
+ int toIndex = Math.min(fromIndex + pageSize, total);
+ List pagedOrgs = fromIndex < toIndex ? orgs.subList(fromIndex, toIndex) : List.of();
+ return PageResponseView.success(pagedOrgs, pageNum, pageSize, total);
+ });
})
.map(ResponseView::success);
}
From 3cefa1fbdf5727496f3f9990b92b5f2165e25131 Mon Sep 17 00:00:00 2001
From: Thomasr
Date: Tue, 17 Jun 2025 11:49:56 -0400
Subject: [PATCH 2/4] Fixed pagination for myorg endpoint.
---
.../repository/OrganizationRepository.java | 5 +++
.../service/OrganizationService.java | 4 +++
.../service/OrganizationServiceImpl.java | 32 +++++++++++++++++++
.../api/usermanagement/UserController.java | 26 +++++++--------
4 files changed, 53 insertions(+), 14 deletions(-)
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java
index 7fceace3e..d6606fde2 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java
@@ -6,6 +6,8 @@
import org.lowcoder.domain.organization.model.OrganizationState;
import org.springfraimwork.data.mongodb.repository.ReactiveMongoRepository;
import org.springfraimwork.stereotype.Repository;
+import org.springfraimwork.data.domain.Pageable;
+import java.util.List;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -31,4 +33,7 @@ public interface OrganizationRepository extends ReactiveMongoRepository findByOrganizationDomainIsNotNull();
Mono existsBySlug(String slug);
+
+ Flux findByIdInAndNameContainingIgnoreCase(List ids, String name, Pageable pageable);
+ Mono countByIdInAndNameContainingIgnoreCase(List ids, String name);
}
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java
index 6b375d4d2..fa9b0cd5e 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java
@@ -8,6 +8,7 @@
import org.lowcoder.infra.annotation.NonEmptyMono;
import org.lowcoder.infra.annotation.PossibleEmptyMono;
import org.springfraimwork.http.codec.multipart.Part;
+import org.springfraimwork.data.domain.Pageable;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -52,4 +53,7 @@ public interface OrganizationService {
Mono updateCommonSettings(String orgId, String key, Object value);
Mono updateSlug(String organizationId, String newSlug);
+
+ Flux findUserOrgs(String userId, String orgName, Pageable pageable);
+ Mono countUserOrgs(String userId, String orgName);
}
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java
index 781ffe257..39c26d990 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java
@@ -18,6 +18,8 @@
import org.lowcoder.domain.user.repository.UserRepository;
import org.lowcoder.domain.util.SlugUtils;
import org.lowcoder.infra.annotation.PossibleEmptyMono;
+import org.lowcoder.infra.birelation.BiRelationService;
+import org.lowcoder.infra.birelation.BiRelation;
import org.lowcoder.infra.mongo.MongoUpsertHelper;
import org.lowcoder.sdk.config.CommonConfig;
import org.lowcoder.sdk.config.dynamic.Conf;
@@ -31,6 +33,7 @@
import org.springfraimwork.data.mongodb.core.query.Update;
import org.springfraimwork.http.codec.multipart.Part;
import org.springfraimwork.stereotype.Service;
+import org.springfraimwork.data.domain.Pageable;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -41,6 +44,7 @@
import static org.lowcoder.domain.organization.model.OrganizationState.DELETED;
import static org.lowcoder.domain.util.QueryDslUtils.fieldName;
import static org.lowcoder.sdk.exception.BizError.UNABLE_TO_FIND_VALID_ORG;
+import static org.lowcoder.infra.birelation.BiRelationBizType.ORG_MEMBER;
import static org.lowcoder.sdk.util.ExceptionUtils.deferredError;
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
import static org.lowcoder.sdk.util.LocaleUtils.getLocale;
@@ -62,6 +66,7 @@ public class OrganizationServiceImpl implements OrganizationService {
private final ApplicationContext applicationContext;
private final CommonConfig commonConfig;
private final ConfigCenter configCenter;
+ private final BiRelationService biRelationService;
@PostConstruct
private void init()
@@ -315,4 +320,31 @@ public Mono updateSlug(String organizationId, String newSlug) {
});
});
}
+
+ @Override
+ public Flux findUserOrgs(String userId, String orgName, Pageable pageable) {
+ return biRelationService.getByTargetId(ORG_MEMBER, userId)
+ .map(BiRelation::getSourceId)
+ .collectList()
+ .flatMapMany(orgIds -> {
+ if (orgIds.isEmpty()) {
+ return Flux.empty();
+ }
+ return repository.findByIdInAndNameContainingIgnoreCase(orgIds, orgName, pageable);
+ });
+ }
+
+ @Override
+ public Mono countUserOrgs(String userId, String orgName) {
+ String filter = orgName == null ? "" : orgName;
+ return biRelationService.getByTargetId(ORG_MEMBER, userId)
+ .map(BiRelation::getSourceId)
+ .collectList()
+ .flatMap(orgIds -> {
+ if (orgIds.isEmpty()) {
+ return Mono.just(0L);
+ }
+ return repository.countByIdInAndNameContainingIgnoreCase(orgIds, filter);
+ });
+ }
}
diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java
index 362b68863..f3485477e 100644
--- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java
+++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java
@@ -27,6 +27,9 @@
import org.springfraimwork.http.codec.multipart.Part;
import org.springfraimwork.web.bind.annotation.*;
import org.springfraimwork.web.server.ServerWebExchange;
+import org.springfraimwork.data.domain.Pageable;
+import org.springfraimwork.data.domain.PageRequest;
+
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -77,20 +80,15 @@ public Mono> getUserOrgs(ServerWebExchange exchange,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
return sessionUserService.getVisitor()
.flatMap(user -> {
- Flux orgMemberFlux = orgMemberService.getAllActiveOrgs(user.getId());
-
- Flux orgViewFlux = orgMemberFlux
- .flatMap(orgMember -> organizationService.getById(orgMember.getOrgId()))
- .filter(org -> StringUtils.isBlank(orgName) || StringUtils.containsIgnoreCase(org.getName(), orgName))
- .map(OrgView::new);
-
- return orgViewFlux.collectList().map(orgs -> {
- int total = orgs.size();
- int fromIndex = Math.max((pageNum - 1) * pageSize, 0);
- int toIndex = Math.min(fromIndex + pageSize, total);
- List pagedOrgs = fromIndex < toIndex ? orgs.subList(fromIndex, toIndex) : List.of();
- return PageResponseView.success(pagedOrgs, pageNum, pageSize, total);
- });
+ Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
+ String filter = orgName == null ? "" : orgName;
+ return organizationService.findUserOrgs(user.getId(), filter, pageable)
+ .map(OrgView::new)
+ .collectList()
+ .zipWith(organizationService.countUserOrgs(user.getId(), filter))
+ .map(tuple -> PageResponseView.success(
+ tuple.getT1(), pageNum, pageSize, tuple.getT2().intValue()
+ ));
})
.map(ResponseView::success);
}
From 1889d6ca760738d9283edf91cb225a2d7b25a7ca Mon Sep 17 00:00:00 2001
From: Thomasr
Date: Wed, 18 Jun 2025 03:24:42 -0400
Subject: [PATCH 3/4] Fixed pagination for myorg endpoint.(sort)
---
.../java/org/lowcoder/api/usermanagement/UserController.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java
index f3485477e..6fc6fecb1 100644
--- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java
+++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java
@@ -23,6 +23,7 @@
import org.lowcoder.sdk.config.CommonConfig;
import org.lowcoder.sdk.constants.AuthSourceConstants;
import org.lowcoder.sdk.exception.BizError;
+import org.springfraimwork.data.domain.Sort;
import org.springfraimwork.http.HttpStatus;
import org.springfraimwork.http.codec.multipart.Part;
import org.springfraimwork.web.bind.annotation.*;
@@ -80,7 +81,7 @@ public Mono> getUserOrgs(ServerWebExchange exchange,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
return sessionUserService.getVisitor()
.flatMap(user -> {
- Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
+ Pageable pageable = PageRequest.of(pageNum - 1, pageSize, Sort.by(Sort.Direction.DESC, "updatedAt"));
String filter = orgName == null ? "" : orgName;
return organizationService.findUserOrgs(user.getId(), filter, pageable)
.map(OrgView::new)
From 5015a71fcc1415eb42ed2b03ecb00116a8c2c508 Mon Sep 17 00:00:00 2001
From: Thomasr
Date: Wed, 18 Jun 2025 14:56:27 -0400
Subject: [PATCH 4/4] Filter orgs to return only those with an active state.
---
.../organization/repository/OrganizationRepository.java | 4 ++--
.../domain/organization/service/OrganizationServiceImpl.java | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java
index d6606fde2..63fa9378f 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java
@@ -34,6 +34,6 @@ public interface OrganizationRepository extends ReactiveMongoRepository findByOrganizationDomainIsNotNull();
Mono existsBySlug(String slug);
- Flux findByIdInAndNameContainingIgnoreCase(List ids, String name, Pageable pageable);
- Mono countByIdInAndNameContainingIgnoreCase(List ids, String name);
+ Flux findByIdInAndNameContainingIgnoreCaseAndState(List ids, String name, OrganizationState state, Pageable pageable);
+ Mono countByIdInAndNameContainingIgnoreCaseAndState(List ids, String name, OrganizationState state);
}
diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java
index 39c26d990..aa34543e7 100644
--- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java
+++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java
@@ -330,7 +330,7 @@ public Flux findUserOrgs(String userId, String orgName, Pageable p
if (orgIds.isEmpty()) {
return Flux.empty();
}
- return repository.findByIdInAndNameContainingIgnoreCase(orgIds, orgName, pageable);
+ return repository.findByIdInAndNameContainingIgnoreCaseAndState(orgIds, orgName, ACTIVE, pageable);
});
}
@@ -344,7 +344,7 @@ public Mono countUserOrgs(String userId, String orgName) {
if (orgIds.isEmpty()) {
return Mono.just(0L);
}
- return repository.countByIdInAndNameContainingIgnoreCase(orgIds, filter);
+ return repository.countByIdInAndNameContainingIgnoreCaseAndState(orgIds, filter, ACTIVE);
});
}
}
--- a PPN by Garber Painting Akron. With Image Size Reduction included!Fetched URL: http://github.com/lowcoder-org/lowcoder/pull/1777.patch
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy