From 6ce1e35ed18a292734ccf85f07475c91344aec15 Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Mon, 7 Jun 2021 15:55:52 +0530 Subject: [PATCH] Add API for setting page order in an application --- .../controllers/ApplicationController.java | 14 +++++++++++-- .../server/domains/ApplicationPage.java | 2 ++ .../CustomApplicationRepository.java | 4 ++++ .../CustomApplicationRepositoryImpl.java | 11 +++++++++- .../services/ApplicationPageService.java | 2 ++ .../services/ApplicationPageServiceImpl.java | 21 +++++++++++++++++++ 6 files changed, 51 insertions(+), 3 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ApplicationController.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ApplicationController.java index a1d7fca78d..074d082415 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ApplicationController.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ApplicationController.java @@ -87,6 +87,16 @@ public class ApplicationController extends BaseController new ResponseDTO<>(HttpStatus.OK.value(), updatedApplication, null)); } + @PutMapping("/{applicationId}/page/{pageId}/reorder") + public Mono> reorderPage( + @PathVariable String applicationId, + @PathVariable String pageId, + @RequestParam Integer order + ) { + return applicationPageService.reorderPage(applicationId, pageId, order) + .map(updatedApplication -> new ResponseDTO<>(HttpStatus.OK.value(), updatedApplication, null)); + } + @DeleteMapping("/{id}") public Mono> delete(@PathVariable String id) { log.debug("Going to delete application with id: {}", id); @@ -132,7 +142,7 @@ public class ApplicationController extends BaseController> getApplicationFile(@PathVariable String id) { log.debug("Going to export application with id: {}", id); - + return importExportApplicationService.exportApplicationById(id) .map(fetchedResource -> { String applicationName = fetchedResource.getExportedApplication().getName(); @@ -143,7 +153,7 @@ public class ApplicationController extends BaseController { @@ -22,6 +24,8 @@ public interface CustomApplicationRepository extends AppsmithRepository addPageToApplication(String applicationId, String pageId, boolean isDefault); + Mono setPages(String applicationId, List pages); + Mono setDefaultPage(String applicationId, String pageId); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/CustomApplicationRepositoryImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/CustomApplicationRepositoryImpl.java index c89afbed96..8b6e0b71d8 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/CustomApplicationRepositoryImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/CustomApplicationRepositoryImpl.java @@ -77,7 +77,16 @@ public class CustomApplicationRepositoryImpl extends BaseAppsmithRepositoryImpl< final ApplicationPage applicationPage = new ApplicationPage(pageId, isDefault); return mongoOperations.updateFirst( Query.query(getIdCriteria(applicationId)), - new Update().addToSet(FieldName.PAGES, applicationPage), + new Update().addToSet(fieldName(QApplication.application.pages), applicationPage), + Application.class + ); + } + + @Override + public Mono setPages(String applicationId, List pages) { + return mongoOperations.updateFirst( + Query.query(getIdCriteria(applicationId)), + new Update().set(fieldName(QApplication.application.pages), pages), Application.class ); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ApplicationPageService.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ApplicationPageService.java index 2b353ccd0f..71f81b9055 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ApplicationPageService.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ApplicationPageService.java @@ -36,4 +36,6 @@ public interface ApplicationPageService { Mono publish(String applicationId); void generateAndSetPagePolicies(Application application, PageDTO page); + + Mono reorderPage(String applicationId, String pageId, Integer order); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ApplicationPageServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ApplicationPageServiceImpl.java index 0cfa0195da..ecc3176edb 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ApplicationPageServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ApplicationPageServiceImpl.java @@ -667,4 +667,25 @@ public class ApplicationPageServiceImpl implements ApplicationPageService { }); } + @Override + public Mono reorderPage(String applicationId, String pageId, Integer order) { + return applicationService.findById(applicationId, MANAGE_APPLICATIONS) + .switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.ACL_NO_RESOURCE_FOUND, FieldName.APPLICATION, applicationId))) + .flatMap(application -> { + // Update the order in unpublished pages here, since this should only ever happen in edit mode. + final List pages = application.getPages(); + + ApplicationPage foundPage = null; + for (final ApplicationPage page : pages) { + if (pageId.equals(page.getId())) { + foundPage = page; + } + } + + return applicationRepository + .setPages(applicationId, pages) + .then(applicationService.getById(applicationId)); + }); + } + }