From 2c2c6bbfe71279ee033d275390b6d50033952e88 Mon Sep 17 00:00:00 2001 From: Thomasr Date: Wed, 13 Nov 2024 11:36:25 -0500 Subject: [PATCH 1/2] Added pagination to application list endpoint --- .../lowcoder/api/application/ApplicationApiServiceImpl.java | 2 +- .../org/lowcoder/api/application/ApplicationController.java | 6 ++++-- .../org/lowcoder/api/application/ApplicationEndpoints.java | 4 +++- .../java/org/lowcoder/api/home/FolderApiServiceImpl.java | 2 +- .../main/java/org/lowcoder/api/home/UserHomeApiService.java | 2 +- .../java/org/lowcoder/api/home/UserHomeApiServiceImpl.java | 6 ++++-- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java index 25d772cdb..cac250e10 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java @@ -170,7 +170,7 @@ private Mono autoGrantPermissionsByFolderDefault(String applicationId, @Nu @Override public Flux getRecycledApplications(String name) { - return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(null, ApplicationStatus.RECYCLED, false, name); + return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(null, ApplicationStatus.RECYCLED, false, name, 0, 0); } private Mono checkCurrentUserApplicationPermission(String applicationId, ResourceAction action) { diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java index e4807183b..91410be25 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java @@ -160,9 +160,11 @@ public Mono> getUserHomePage(@RequestParam(requir public Mono>> getApplications(@RequestParam(required = false) Integer applicationType, @RequestParam(required = false) ApplicationStatus applicationStatus, @RequestParam(defaultValue = "true") boolean withContainerSize, - @RequestParam(required = false) String name) { + @RequestParam(required = false) String name, + @RequestParam(required = false, defaultValue = "0") Integer pageNum, + @RequestParam(required = false, defaultValue = "0") Integer pageSize) { ApplicationType applicationTypeEnum = applicationType == null ? null : ApplicationType.fromValue(applicationType); - return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationTypeEnum, applicationStatus, withContainerSize, name) + return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationTypeEnum, applicationStatus, withContainerSize, name, pageNum, pageSize) .collectList() .map(ResponseView::success); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationEndpoints.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationEndpoints.java index 8db147302..4eed69ee2 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationEndpoints.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationEndpoints.java @@ -166,7 +166,9 @@ public Mono> updateEditState(@PathVariable String applicat public Mono>> getApplications(@RequestParam(required = false) Integer applicationType, @RequestParam(required = false) ApplicationStatus applicationStatus, @RequestParam(defaultValue = "true") boolean withContainerSize, - @RequestParam(required = false) String name); + @RequestParam(required = false) String name, + @RequestParam(required = false, defaultValue = "0") Integer pageNum, + @RequestParam(required = false, defaultValue = "0") Integer pageSize); @Operation( tags = TAG_APPLICATION_MANAGEMENT, diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java index 79fafda96..64a8f872c 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java @@ -284,7 +284,7 @@ private Mono> buildApplicationInfoView .cache(); Flux applicationInfoViewFlux = - userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationType, ApplicationStatus.NORMAL, false, null) + userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationType, ApplicationStatus.NORMAL, false, null, 0, 0) .cache(); Mono> application2FolderMapMono = applicationInfoViewFlux diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiService.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiService.java index e711304a4..5e0610173 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiService.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiService.java @@ -24,7 +24,7 @@ public interface UserHomeApiService { Mono getUserHomePageView(ApplicationType applicationType); Flux getAllAuthorisedApplications4CurrentOrgMember(@Nullable ApplicationType applicationType, - @Nullable ApplicationStatus applicationStatus, boolean withContainerSize, @Nullable String name); + @Nullable ApplicationStatus applicationStatus, boolean withContainerSize, @Nullable String name, Integer pageNum, Integer pageSize); Flux getAllAuthorisedBundles4CurrentOrgMember(@Nullable BundleStatus bundleStatus); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java index ae5f22fcf..5b467ac9a 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java @@ -189,7 +189,7 @@ public Mono getUserHomePageView(ApplicationType applicationTyp @Override public Flux getAllAuthorisedApplications4CurrentOrgMember(@Nullable ApplicationType applicationType, - @Nullable ApplicationStatus applicationStatus, boolean withContainerSize, @Nullable String name) { + @Nullable ApplicationStatus applicationStatus, boolean withContainerSize, @Nullable String name, Integer pageNum, Integer pageSize) { return sessionUserService.getVisitorOrgMemberCache() .flatMapMany(orgMember -> { @@ -207,7 +207,9 @@ public Flux getAllAuthorisedApplications4CurrentOrgMember(@ && (isNull(name) || StringUtils.containsIgnoreCase(application.getName(), name))) .cache() .collectList() - .flatMapIterable(Function.identity()); + .flatMapIterable(Function.identity()) + .skip((long) pageNum * pageSize); + if(pageSize > 0) applicationFlux = applicationFlux.take(pageSize); // last view time Mono> applicationLastViewTimeMapMono = userApplicationInteractionService.findByUserId(visitorId) From 25f4da06b07e9c67e8062973f205316ef23f5b26 Mon Sep 17 00:00:00 2001 From: Thomasr Date: Wed, 13 Nov 2024 12:57:59 -0500 Subject: [PATCH 2/2] Added pagination to folder elements endpoint --- .../main/java/org/lowcoder/api/home/FolderApiService.java | 2 +- .../java/org/lowcoder/api/home/FolderApiServiceImpl.java | 8 +++++--- .../main/java/org/lowcoder/api/home/FolderController.java | 6 ++++-- .../main/java/org/lowcoder/api/home/FolderEndpoints.java | 4 +++- .../org/lowcoder/api/home/UserHomeApiServiceImpl.java | 2 +- .../org/lowcoder/api/service/FolderApiServiceTest.java | 2 +- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiService.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiService.java index de161bb19..b24dc8a70 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiService.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiService.java @@ -27,7 +27,7 @@ public interface FolderApiService { Mono upsertLastViewTime(@Nullable String folderId); - Flux getElements(@Nullable String folderId, @Nullable ApplicationType applicationType, @Nullable String name); + Flux getElements(@Nullable String folderId, @Nullable ApplicationType applicationType, @Nullable String name, Integer pageNum, Integer pageSize); Mono grantPermission(String folderId, Set userIds, Set groupIds, ResourceRole role); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java index 64a8f872c..d1bead9e9 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java @@ -233,8 +233,8 @@ public Mono upsertLastViewTime(@Nullable String folderId) { * @return flux of {@link ApplicationInfoView} or {@link FolderInfoView} */ @Override - public Flux getElements(@Nullable String folderId, @Nullable ApplicationType applicationType, @Nullable String name) { - return buildApplicationInfoViewTree(applicationType, name) + public Flux getElements(@Nullable String folderId, @Nullable ApplicationType applicationType, @Nullable String name, Integer pageNum, Integer pageSize) { + var retMono = buildApplicationInfoViewTree(applicationType, name) .flatMap(tree -> { FolderNode folderNode = tree.get(folderId); if (folderNode == null) { @@ -264,7 +264,9 @@ public Flux getElements(@Nullable String folderId, @Nullable ApplicationType }); }) .flatMapIterable(tuple -> tuple.getT1().getChildren()) - .map(node -> { + .skip(pageNum * pageSize); + if(pageSize > 0) retMono = retMono.take(pageSize); + return retMono.map(node -> { if (node instanceof ElementNode elementNode) { return elementNode.getSelf(); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java index f75b73d9d..96f44dadd 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java @@ -70,9 +70,11 @@ public Mono> update(@RequestBody Folder folder) { @Override public Mono>> getElements(@RequestParam(value = "id", required = false) String folderId, @RequestParam(value = "applicationType", required = false) ApplicationType applicationType, - @RequestParam(required = false) String name) { + @RequestParam(required = false) String name, + @RequestParam(required = false, defaultValue = "0") Integer pageNum, + @RequestParam(required = false, defaultValue = "0") Integer pageSize) { String objectId = gidService.convertFolderIdToObjectId(folderId); - return folderApiService.getElements(objectId, applicationType, name) + return folderApiService.getElements(objectId, applicationType, name, pageNum, pageSize) .collectList() .delayUntil(__ -> folderApiService.upsertLastViewTime(objectId)) .map(ResponseView::success); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderEndpoints.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderEndpoints.java index 337048d96..bb72a02fd 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderEndpoints.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderEndpoints.java @@ -70,7 +70,9 @@ public interface FolderEndpoints @GetMapping("/elements") public Mono>> getElements(@RequestParam(value = "id", required = false) String folderId, @RequestParam(value = "applicationType", required = false) ApplicationType applicationType, - @RequestParam(required = false) String name); + @RequestParam(required = false) String name, + @RequestParam(required = false, defaultValue = "0") Integer pageNum, + @RequestParam(required = false, defaultValue = "0") Integer pageSize); @Operation( tags = TAG_FOLDER_MANAGEMENT, diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java index 5b467ac9a..a11cc1ff0 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java @@ -157,7 +157,7 @@ public Mono getUserHomePageView(ApplicationType applicationTyp } return organizationService.getById(currentOrgId) - .zipWith(folderApiService.getElements(null, applicationType, null).collectList()) + .zipWith(folderApiService.getElements(null, applicationType, null, 0, 0).collectList()) .map(tuple2 -> { Organization organization = tuple2.getT1(); List list = tuple2.getT2(); diff --git a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/service/FolderApiServiceTest.java b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/service/FolderApiServiceTest.java index c470c11d0..1ab8556ec 100644 --- a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/service/FolderApiServiceTest.java +++ b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/service/FolderApiServiceTest.java @@ -137,7 +137,7 @@ public void updateByGid() { public void move() { Mono> mono = folderApiService.move("app01", "folder02") - .then(folderApiService.getElements("folder02", null, null).collectList()); + .then(folderApiService.getElements("folder02", null, null, 0, 0).collectList()); StepVerifier.create(mono) .assertNext(list -> {