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 f60d41eae..5c8e269b9 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 @@ -28,6 +28,7 @@ import org.lowcoder.domain.application.service.ApplicationService; import org.lowcoder.domain.datasource.model.Datasource; import org.lowcoder.domain.datasource.service.DatasourceService; +import org.lowcoder.domain.folder.service.FolderElementRelationService; import org.lowcoder.domain.interaction.UserApplicationInteractionService; import org.lowcoder.domain.organization.model.Organization; import org.lowcoder.domain.organization.service.OrgMemberService; @@ -94,6 +95,7 @@ public class ApplicationApiServiceImpl implements ApplicationApiService { private final DatasourceService datasourceService; private final ApplicationHistorySnapshotService applicationHistorySnapshotService; private final ApplicationRecordService applicationRecordService; + private final FolderElementRelationService folderElementRelationService; @Override public Mono create(CreateApplicationRequest createApplicationRequest) { @@ -185,10 +187,10 @@ public Mono delete(String applicationId) { return checkApplicationStatus(applicationId, ApplicationStatus.RECYCLED) .then(updateApplicationStatus(applicationId, ApplicationStatus.DELETED)) .then(applicationService.findById(applicationId)) - .map(application -> ApplicationView.builder() - .applicationInfoView(buildView(application)) + .flatMap(application -> buildView(application).map(appInfoView -> ApplicationView.builder() + .applicationInfoView(appInfoView) .applicationDSL(application.getEditingApplicationDSL()) - .build()); + .build())); } @Override @@ -269,13 +271,14 @@ public Mono getEditingApplication(String applicationId) { .map(dsl -> Map.entry(app.getId(), sanitizeDsl(dsl)))) .collectMap(Map.Entry::getKey, Map.Entry::getValue) .flatMap(dependentModuleDsl -> - applicationService.updateById(applicationId, application).map(__ -> - ApplicationView.builder() - .applicationInfoView(buildView(application, permission.getResourceRole().getValue())) - .applicationDSL(application.getEditingApplicationDSL()) - .moduleDSL(dependentModuleDsl) - .orgCommonSettings(commonSettings) - .build())); + applicationService.updateById(applicationId, application).flatMap(__ -> + buildView(application, permission.getResourceRole().getValue()).map(appInfoView -> + ApplicationView.builder() + .applicationInfoView(appInfoView) + .applicationDSL(application.getEditingApplicationDSL()) + .moduleDSL(dependentModuleDsl) + .orgCommonSettings(commonSettings) + .build()))); }); } @@ -299,14 +302,15 @@ public Mono getPublishedApplication(String applicationId, Appli .map(dsl -> Map.entry(app.getId(), sanitizeDsl(dsl)))) .collectMap(Map.Entry::getKey, Map.Entry::getValue) .flatMap(dependentModuleDsl -> - application.getLiveApplicationDsl(applicationRecordService).map(liveDsl -> - ApplicationView.builder() - .applicationInfoView(buildView(application, permission.getResourceRole().getValue())) - .applicationDSL(sanitizeDsl(liveDsl)) - .moduleDSL(dependentModuleDsl) - .orgCommonSettings(commonSettings) - .templateId(templateId) - .build()) + application.getLiveApplicationDsl(applicationRecordService).flatMap(liveDsl -> + buildView(application, permission.getResourceRole().getValue()).map(appInfoView -> + ApplicationView.builder() + .applicationInfoView(appInfoView) + .applicationDSL(sanitizeDsl(liveDsl)) + .moduleDSL(dependentModuleDsl) + .orgCommonSettings(commonSettings) + .templateId(templateId) + .build())) ); }) .delayUntil(applicationView -> { @@ -346,10 +350,10 @@ public Mono update(String applicationId, Application applicatio applicationId, EDIT_APPLICATIONS)) .delayUntil(__ -> checkDatasourcePermissions(application)) .flatMap(permission -> doUpdateApplication(applicationId, application) - .map(applicationUpdated -> ApplicationView.builder() - .applicationInfoView(buildView(applicationUpdated, permission.getResourceRole().getValue())) + .flatMap(applicationUpdated -> buildView(applicationUpdated, permission.getResourceRole().getValue()).map(appInfoView -> ApplicationView.builder() + .applicationInfoView(appInfoView) .applicationDSL(applicationUpdated.getEditingApplicationDSL()) - .build())); + .build()))); } private Mono doUpdateApplication(String applicationId, Application application) { @@ -376,10 +380,10 @@ public Mono publish(String applicationId, ApplicationPublishReq .build()) .flatMap(applicationRecordService::insert)) .flatMap(permission -> applicationService.findById(applicationId) - .map(applicationUpdated -> ApplicationView.builder() - .applicationInfoView(buildView(applicationUpdated, permission.getResourceRole().getValue())) + .flatMap(applicationUpdated -> buildView(applicationUpdated, permission.getResourceRole().getValue()).map(appInfoView -> ApplicationView.builder() + .applicationInfoView(appInfoView) .applicationDSL(applicationUpdated.getEditingApplicationDSL()) - .build())); + .build()))); } @Override @@ -472,10 +476,10 @@ public Mono createFromTemplate(String templateId) { .delayUntil(orgMember -> orgDevChecker.checkCurrentOrgDev()) .delayUntil(bizThresholdChecker::checkMaxOrgApplicationCount) .flatMap(orgMember -> templateSolutionService.createFromTemplate(templateId, orgMember.getOrgId(), orgMember.getUserId()) - .map(applicationCreated -> ApplicationView.builder() - .applicationInfoView(buildView(applicationCreated)) + .flatMap(applicationCreated -> buildView(applicationCreated).map(appInfoView -> ApplicationView.builder() + .applicationInfoView(appInfoView) .applicationDSL(applicationCreated.getEditingApplicationDSL()) - .build())); + .build()))); } @Override @@ -547,8 +551,14 @@ public Mono checkApplicationPermissionWithReadableErrorMsg(S - private ApplicationInfoView buildView(Application application, String role) { - return buildView(application, role, null); + private Mono buildView(Application application, String role) { + return Mono.just(buildView(application, role, null)).delayUntil(applicationInfoView -> { + String applicationId = applicationInfoView.getApplicationId(); + return folderElementRelationService.getByElementIds(List.of(applicationId)) + .doOnNext(folderElement -> { + applicationInfoView.setFolderId(folderElement.folderId()); + }).then(); + }); } private ApplicationInfoView buildView(Application application, String role, @Nullable String folderId) { @@ -572,7 +582,7 @@ private ApplicationInfoView buildView(Application application, String role, @Nul .build(); } - private ApplicationInfoView buildView(Application application) { + private Mono buildView(Application application) { return buildView(application, ""); } 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 b765d19f6..b62a6e887 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 @@ -39,7 +39,6 @@ public class ApplicationController implements ApplicationEndpoints { private final BusinessEventPublisher businessEventPublisher; private final SessionUserService sessionUserService; private final GidService gidService; - private final FolderElementRelationService folderElementRelationService; private final ApplicationRecordService applicationRecordService; @Override @@ -187,13 +186,6 @@ public Mono>> getApplications(@RequestPar @RequestParam(required = false, defaultValue = "0") Integer pageSize) { ApplicationType applicationTypeEnum = applicationType == null ? null : ApplicationType.fromValue(applicationType); var flux = userHomeApiService.getAllAuthorisedApplications4CurrentOrgMember(applicationTypeEnum, applicationStatus, withContainerSize, name, category) - .delayUntil(applicationInfoView -> { - String applicationId = applicationInfoView.getApplicationId(); - return folderElementRelationService.getByElementIds(List.of(applicationId)) - .doOnNext(folderElement -> { - applicationInfoView.setFolderId(folderElement.folderId()); - }).then(); - }) .cache(); Mono countMono = flux.count(); var flux1 = flux.skip((long) (pageNum - 1) * pageSize); 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 efc27c41a..ee02ce0ab 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 @@ -21,6 +21,7 @@ import org.lowcoder.domain.bundle.model.BundleStatus; import org.lowcoder.domain.bundle.service.BundleElementRelationServiceImpl; import org.lowcoder.domain.bundle.service.BundleService; +import org.lowcoder.domain.folder.service.FolderElementRelationService; import org.lowcoder.domain.interaction.UserApplicationInteraction; import org.lowcoder.domain.interaction.UserApplicationInteractionService; import org.lowcoder.domain.organization.model.OrgMember; @@ -72,6 +73,7 @@ public class UserHomeApiServiceImpl implements UserHomeApiService { private final BundleElementRelationServiceImpl bundleElementRelationServiceImpl; private final BundleService bundleService; private final ApplicationRecordService applicationRecordService; + private final FolderElementRelationService folderElementRelationService; @Override public Mono buildUserProfileView(User user, ServerWebExchange exchange) { @@ -607,6 +609,12 @@ private Mono buildView(Application application, ResourceRol .build())); } return Mono.just(applicationInfoViewBuilder.build()); + }).delayUntil(applicationInfoView -> { + String applicationId = applicationInfoView.getApplicationId(); + return folderElementRelationService.getByElementIds(List.of(applicationId)) + .doOnNext(folderElement -> { + applicationInfoView.setFolderId(folderElement.folderId()); + }).then(); }); }