2828import org .lowcoder .domain .application .service .ApplicationService ;
2929import org .lowcoder .domain .datasource .model .Datasource ;
3030import org .lowcoder .domain .datasource .service .DatasourceService ;
31+ import org .lowcoder .domain .folder .service .FolderElementRelationService ;
3132import org .lowcoder .domain .interaction .UserApplicationInteractionService ;
3233import org .lowcoder .domain .organization .model .Organization ;
3334import org .lowcoder .domain .organization .service .OrgMemberService ;
@@ -94,6 +95,7 @@ public class ApplicationApiServiceImpl implements ApplicationApiService {
9495 private final DatasourceService datasourceService ;
9596 private final ApplicationHistorySnapshotService applicationHistorySnapshotService ;
9697 private final ApplicationRecordService applicationRecordService ;
98+ private final FolderElementRelationService folderElementRelationService ;
9799
98100 @ Override
99101 public Mono <ApplicationView > create (CreateApplicationRequest createApplicationRequest ) {
@@ -185,10 +187,10 @@ public Mono<ApplicationView> delete(String applicationId) {
185187 return checkApplicationStatus (applicationId , ApplicationStatus .RECYCLED )
186188 .then (updateApplicationStatus (applicationId , ApplicationStatus .DELETED ))
187189 .then (applicationService .findById (applicationId ))
188- .map (application -> ApplicationView .builder ()
189- .applicationInfoView (buildView ( application ) )
190+ .flatMap (application -> buildView ( application ). map ( appInfoView -> ApplicationView .builder ()
191+ .applicationInfoView (appInfoView )
190192 .applicationDSL (application .getEditingApplicationDSL ())
191- .build ());
193+ .build ())) ;
192194 }
193195
194196 @ Override
@@ -269,13 +271,14 @@ public Mono<ApplicationView> getEditingApplication(String applicationId) {
269271 .map (dsl -> Map .entry (app .getId (), sanitizeDsl (dsl ))))
270272 .collectMap (Map .Entry ::getKey , Map .Entry ::getValue )
271273 .flatMap (dependentModuleDsl ->
272- applicationService .updateById (applicationId , application ).map (__ ->
273- ApplicationView .builder ()
274- .applicationInfoView (buildView (application , permission .getResourceRole ().getValue ()))
275- .applicationDSL (application .getEditingApplicationDSL ())
276- .moduleDSL (dependentModuleDsl )
277- .orgCommonSettings (commonSettings )
278- .build ()));
274+ applicationService .updateById (applicationId , application ).flatMap (__ ->
275+ buildView (application , permission .getResourceRole ().getValue ()).map (appInfoView ->
276+ ApplicationView .builder ()
277+ .applicationInfoView (appInfoView )
278+ .applicationDSL (application .getEditingApplicationDSL ())
279+ .moduleDSL (dependentModuleDsl )
280+ .orgCommonSettings (commonSettings )
281+ .build ())));
279282 });
280283 }
281284
@@ -299,14 +302,15 @@ public Mono<ApplicationView> getPublishedApplication(String applicationId, Appli
299302 .map (dsl -> Map .entry (app .getId (), sanitizeDsl (dsl ))))
300303 .collectMap (Map .Entry ::getKey , Map .Entry ::getValue )
301304 .flatMap (dependentModuleDsl ->
302- application .getLiveApplicationDsl (applicationRecordService ).map (liveDsl ->
303- ApplicationView .builder ()
304- .applicationInfoView (buildView (application , permission .getResourceRole ().getValue ()))
305- .applicationDSL (sanitizeDsl (liveDsl ))
306- .moduleDSL (dependentModuleDsl )
307- .orgCommonSettings (commonSettings )
308- .templateId (templateId )
309- .build ())
305+ application .getLiveApplicationDsl (applicationRecordService ).flatMap (liveDsl ->
306+ buildView (application , permission .getResourceRole ().getValue ()).map (appInfoView ->
307+ ApplicationView .builder ()
308+ .applicationInfoView (appInfoView )
309+ .applicationDSL (sanitizeDsl (liveDsl ))
310+ .moduleDSL (dependentModuleDsl )
311+ .orgCommonSettings (commonSettings )
312+ .templateId (templateId )
313+ .build ()))
310314 );
311315 })
312316 .delayUntil (applicationView -> {
@@ -346,10 +350,10 @@ public Mono<ApplicationView> update(String applicationId, Application applicatio
346350 applicationId , EDIT_APPLICATIONS ))
347351 .delayUntil (__ -> checkDatasourcePermissions (application ))
348352 .flatMap (permission -> doUpdateApplication (applicationId , application )
349- .map (applicationUpdated -> ApplicationView .builder ()
350- .applicationInfoView (buildView ( applicationUpdated , permission . getResourceRole (). getValue ()) )
353+ .flatMap (applicationUpdated -> buildView ( applicationUpdated , permission . getResourceRole (). getValue ()). map ( appInfoView -> ApplicationView .builder ()
354+ .applicationInfoView (appInfoView )
351355 .applicationDSL (applicationUpdated .getEditingApplicationDSL ())
352- .build ()));
356+ .build ()))) ;
353357 }
354358
355359 private Mono <Application > doUpdateApplication (String applicationId , Application application ) {
@@ -376,10 +380,10 @@ public Mono<ApplicationView> publish(String applicationId, ApplicationPublishReq
376380 .build ())
377381 .flatMap (applicationRecordService ::insert ))
378382 .flatMap (permission -> applicationService .findById (applicationId )
379- .map (applicationUpdated -> ApplicationView .builder ()
380- .applicationInfoView (buildView ( applicationUpdated , permission . getResourceRole (). getValue ()) )
383+ .flatMap (applicationUpdated -> buildView ( applicationUpdated , permission . getResourceRole (). getValue ()). map ( appInfoView -> ApplicationView .builder ()
384+ .applicationInfoView (appInfoView )
381385 .applicationDSL (applicationUpdated .getEditingApplicationDSL ())
382- .build ()));
386+ .build ()))) ;
383387 }
384388
385389 @ Override
@@ -472,10 +476,10 @@ public Mono<ApplicationView> createFromTemplate(String templateId) {
472476 .delayUntil (orgMember -> orgDevChecker .checkCurrentOrgDev ())
473477 .delayUntil (bizThresholdChecker ::checkMaxOrgApplicationCount )
474478 .flatMap (orgMember -> templateSolutionService .createFromTemplate (templateId , orgMember .getOrgId (), orgMember .getUserId ())
475- .map (applicationCreated -> ApplicationView .builder ()
476- .applicationInfoView (buildView ( applicationCreated ) )
479+ .flatMap (applicationCreated -> buildView ( applicationCreated ). map ( appInfoView -> ApplicationView .builder ()
480+ .applicationInfoView (appInfoView )
477481 .applicationDSL (applicationCreated .getEditingApplicationDSL ())
478- .build ()));
482+ .build ()))) ;
479483 }
480484
481485 @ Override
@@ -547,8 +551,14 @@ public Mono<ResourcePermission> checkApplicationPermissionWithReadableErrorMsg(S
547551
548552
549553
550- private ApplicationInfoView buildView (Application application , String role ) {
551- return buildView (application , role , null );
554+ private Mono <ApplicationInfoView > buildView (Application application , String role ) {
555+ return Mono .just (buildView (application , role , null )).delayUntil (applicationInfoView -> {
556+ String applicationId = applicationInfoView .getApplicationId ();
557+ return folderElementRelationService .getByElementIds (List .of (applicationId ))
558+ .doOnNext (folderElement -> {
559+ applicationInfoView .setFolderId (folderElement .folderId ());
560+ }).then ();
561+ });
552562 }
553563
554564 private ApplicationInfoView buildView (Application application , String role , @ Nullable String folderId ) {
@@ -572,7 +582,7 @@ private ApplicationInfoView buildView(Application application, String role, @Nul
572582 .build ();
573583 }
574584
575- private ApplicationInfoView buildView (Application application ) {
585+ private Mono < ApplicationInfoView > buildView (Application application ) {
576586 return buildView (application , "" );
577587 }
578588
0 commit comments