Skip to content

Commit e939fe2

Browse files
committed
Add pagination total
1 parent e11e951 commit e939fe2

File tree

9 files changed

+38
-35
lines changed

9 files changed

+38
-35
lines changed

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ private Mono<Void> autoGrantPermissionsByFolderDefault(String applicationId, @Nu
170170

171171
@Override
172172
public Flux<ApplicationInfoView> getRecycledApplications(String name) {
173-
return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(null, ApplicationStatus.RECYCLED, false, name, 0, 0);
173+
return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(null, ApplicationStatus.RECYCLED, false, name);
174174
}
175175

176176
private Mono<Void> checkCurrentUserApplicationPermission(String applicationId, ResourceAction action) {

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.lowcoder.api.application.view.ApplicationView;
1818
import org.lowcoder.api.application.view.MarketplaceApplicationInfoView;
1919
// should we not have a AgencyApplicationInfoView
20+
import org.lowcoder.api.framework.view.PageResponseView;
2021
import org.lowcoder.api.framework.view.ResponseView;
2122
import org.lowcoder.api.home.SessionUserService;
2223
import org.lowcoder.api.home.UserHomeApiService;
@@ -164,9 +165,12 @@ public Mono<ResponseView<List<ApplicationInfoView>>> getApplications(@RequestPar
164165
@RequestParam(required = false, defaultValue = "0") Integer pageNum,
165166
@RequestParam(required = false, defaultValue = "0") Integer pageSize) {
166167
ApplicationType applicationTypeEnum = applicationType == null ? null : ApplicationType.fromValue(applicationType);
167-
return userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationTypeEnum, applicationStatus, withContainerSize, name, pageNum, pageSize)
168-
.collectList()
169-
.map(ResponseView::success);
168+
var flux = userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationTypeEnum, applicationStatus, withContainerSize, name).cache();
169+
Mono<Long> countMono = flux.count();
170+
var flux1 = flux.skip((long) pageNum * pageSize);
171+
if(pageSize > 0) flux1 = flux1.take(pageSize);
172+
return flux1.collectList().zipWith(countMono)
173+
.map(tuple -> PageResponseView.success(tuple.getT1(), pageNum, pageSize, Math.toIntExact(tuple.getT2())));
170174
}
171175

172176
@Override

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public interface FolderApiService {
2727

2828
Mono<Void> upsertLastViewTime(@Nullable String folderId);
2929

30-
Flux<?> getElements(@Nullable String folderId, @Nullable ApplicationType applicationType, @Nullable String name, Integer pageNum, Integer pageSize);
30+
Flux<?> getElements(@Nullable String folderId, @Nullable ApplicationType applicationType, @Nullable String name);
3131

3232
Mono<Void> grantPermission(String folderId, Set<String> userIds, Set<String> groupIds, ResourceRole role);
3333

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,8 @@ public Mono<Void> upsertLastViewTime(@Nullable String folderId) {
233233
* @return flux of {@link ApplicationInfoView} or {@link FolderInfoView}
234234
*/
235235
@Override
236-
public Flux<?> getElements(@Nullable String folderId, @Nullable ApplicationType applicationType, @Nullable String name, Integer pageNum, Integer pageSize) {
237-
var retMono = buildApplicationInfoViewTree(applicationType, name)
236+
public Flux<?> getElements(@Nullable String folderId, @Nullable ApplicationType applicationType, @Nullable String name) {
237+
return buildApplicationInfoViewTree(applicationType, name)
238238
.flatMap(tree -> {
239239
FolderNode<ApplicationInfoView, FolderInfoView> folderNode = tree.get(folderId);
240240
if (folderNode == null) {
@@ -264,9 +264,7 @@ public Flux<?> getElements(@Nullable String folderId, @Nullable ApplicationType
264264
});
265265
})
266266
.flatMapIterable(tuple -> tuple.getT1().getChildren())
267-
.skip(pageNum * pageSize);
268-
if(pageSize > 0) retMono = retMono.take(pageSize);
269-
return retMono.map(node -> {
267+
.map(node -> {
270268
if (node instanceof ElementNode<ApplicationInfoView, FolderInfoView> elementNode) {
271269
return elementNode.getSelf();
272270
}
@@ -286,7 +284,7 @@ private Mono<Tree<ApplicationInfoView, FolderInfoView>> buildApplicationInfoView
286284
.cache();
287285

288286
Flux<ApplicationInfoView> applicationInfoViewFlux =
289-
userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationType, ApplicationStatus.NORMAL, false, null, 0, 0)
287+
userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationType, ApplicationStatus.NORMAL, false, null)
290288
.cache();
291289

292290
Mono<Map<String, String>> application2FolderMapMono = applicationInfoViewFlux

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
import static org.lowcoder.sdk.exception.BizError.INVALID_PARAMETER;
55
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
66

7-
import java.util.List;
8-
97
import org.lowcoder.api.application.view.ApplicationPermissionView;
8+
import org.lowcoder.api.framework.view.PageResponseView;
109
import org.lowcoder.api.framework.view.ResponseView;
1110
import org.lowcoder.api.util.BusinessEventPublisher;
1211
import org.lowcoder.api.util.GidService;
@@ -68,16 +67,20 @@ public Mono<ResponseView<FolderInfoView>> update(@RequestBody Folder folder) {
6867
* get all files under folder
6968
*/
7069
@Override
71-
public Mono<ResponseView<List<?>>> getElements(@RequestParam(value = "id", required = false) String folderId,
72-
@RequestParam(value = "applicationType", required = false) ApplicationType applicationType,
73-
@RequestParam(required = false) String name,
74-
@RequestParam(required = false, defaultValue = "0") Integer pageNum,
75-
@RequestParam(required = false, defaultValue = "0") Integer pageSize) {
70+
public Mono<PageResponseView<?>> getElements(@RequestParam(value = "id", required = false) String folderId,
71+
@RequestParam(value = "applicationType", required = false) ApplicationType applicationType,
72+
@RequestParam(required = false) String name,
73+
@RequestParam(required = false, defaultValue = "0") Integer pageNum,
74+
@RequestParam(required = false, defaultValue = "0") Integer pageSize) {
7675
String objectId = gidService.convertFolderIdToObjectId(folderId);
77-
return folderApiService.getElements(objectId, applicationType, name, pageNum, pageSize)
78-
.collectList()
79-
.delayUntil(__ -> folderApiService.upsertLastViewTime(objectId))
80-
.map(ResponseView::success);
76+
var flux = folderApiService.getElements(objectId, applicationType, name).cache();
77+
var countMono = flux.count();
78+
var flux1 = flux.skip((long) pageNum * pageSize);
79+
if(pageSize > 0) flux1 = flux1.take(pageSize);
80+
return flux1.collectList()
81+
.delayUntil(__ -> folderApiService.upsertLastViewTime(objectId))
82+
.zipWith(countMono)
83+
.map(tuple -> PageResponseView.success(tuple.getT1(), pageNum, pageSize, Math.toIntExact(tuple.getT2())));
8184
}
8285

8386
@Override

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderEndpoints.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.lowcoder.api.home;
22

3-
import java.util.List;
43
import java.util.Set;
54

65
import org.lowcoder.api.application.view.ApplicationPermissionView;
6+
import org.lowcoder.api.framework.view.PageResponseView;
77
import org.lowcoder.api.framework.view.ResponseView;
88
import org.lowcoder.domain.application.model.ApplicationType;
99
import org.lowcoder.domain.folder.model.Folder;
@@ -68,11 +68,11 @@ public interface FolderEndpoints
6868
description = "Retrieve the contents of an Application Folder within Lowcoder, including Applications and Subfolders."
6969
)
7070
@GetMapping("/elements")
71-
public Mono<ResponseView<List<?>>> getElements(@RequestParam(value = "id", required = false) String folderId,
72-
@RequestParam(value = "applicationType", required = false) ApplicationType applicationType,
73-
@RequestParam(required = false) String name,
74-
@RequestParam(required = false, defaultValue = "0") Integer pageNum,
75-
@RequestParam(required = false, defaultValue = "0") Integer pageSize);
71+
public Mono<PageResponseView<?>> getElements(@RequestParam(value = "id", required = false) String folderId,
72+
@RequestParam(value = "applicationType", required = false) ApplicationType applicationType,
73+
@RequestParam(required = false) String name,
74+
@RequestParam(required = false, defaultValue = "0") Integer pageNum,
75+
@RequestParam(required = false, defaultValue = "0") Integer pageSize);
7676

7777
@Operation(
7878
tags = TAG_FOLDER_MANAGEMENT,

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public interface UserHomeApiService {
2424
Mono<UserHomepageView> getUserHomePageView(ApplicationType applicationType);
2525

2626
Flux<ApplicationInfoView> getAllAuthorisedApplications4CurrentOrgMember(@Nullable ApplicationType applicationType,
27-
@Nullable ApplicationStatus applicationStatus, boolean withContainerSize, @Nullable String name, Integer pageNum, Integer pageSize);
27+
@Nullable ApplicationStatus applicationStatus, boolean withContainerSize, @Nullable String name);
2828

2929
Flux<BundleInfoView> getAllAuthorisedBundles4CurrentOrgMember(@Nullable BundleStatus bundleStatus);
3030

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public Mono<UserHomepageView> getUserHomePageView(ApplicationType applicationTyp
157157
}
158158

159159
return organizationService.getById(currentOrgId)
160-
.zipWith(folderApiService.getElements(null, applicationType, null, 0, 0).collectList())
160+
.zipWith(folderApiService.getElements(null, applicationType, null).collectList())
161161
.map(tuple2 -> {
162162
Organization organization = tuple2.getT1();
163163
List<?> list = tuple2.getT2();
@@ -189,7 +189,7 @@ public Mono<UserHomepageView> getUserHomePageView(ApplicationType applicationTyp
189189

190190
@Override
191191
public Flux<ApplicationInfoView> getAllAuthorisedApplications4CurrentOrgMember(@Nullable ApplicationType applicationType,
192-
@Nullable ApplicationStatus applicationStatus, boolean withContainerSize, @Nullable String name, Integer pageNum, Integer pageSize) {
192+
@Nullable ApplicationStatus applicationStatus, boolean withContainerSize, @Nullable String name) {
193193

194194
return sessionUserService.getVisitorOrgMemberCache()
195195
.flatMapMany(orgMember -> {
@@ -207,9 +207,7 @@ public Flux<ApplicationInfoView> getAllAuthorisedApplications4CurrentOrgMember(@
207207
&& (isNull(name) || StringUtils.containsIgnoreCase(application.getName(), name)))
208208
.cache()
209209
.collectList()
210-
.flatMapIterable(Function.identity())
211-
.skip((long) pageNum * pageSize);
212-
if(pageSize > 0) applicationFlux = applicationFlux.take(pageSize);
210+
.flatMapIterable(Function.identity());
213211

214212
// last view time
215213
Mono<Map<String, Instant>> applicationLastViewTimeMapMono = userApplicationInteractionService.findByUserId(visitorId)

server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/service/FolderApiServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public void updateByGid() {
137137
public void move() {
138138

139139
Mono<? extends List<?>> mono = folderApiService.move("app01", "folder02")
140-
.then(folderApiService.getElements("folder02", null, null, 0, 0).collectList());
140+
.then(folderApiService.getElements("folder02", null, null).collectList());
141141

142142
StepVerifier.create(mono)
143143
.assertNext(list -> {

0 commit comments

Comments
 (0)