From 350d89b98e46c43a50b5cd5fb90ad986a0a61a7c Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Tue, 12 Mar 2024 11:24:15 +0530 Subject: [PATCH] chore: Migrate NewAction repo to Bridge APIs (#31632) --- .../server/helpers/ce/bridge/Bridge.java | 16 + .../server/helpers/ce/bridge/BridgeQuery.java | 37 ++ .../ce/CustomNewActionRepositoryCE.java | 12 - .../ce/CustomNewActionRepositoryCEImpl.java | 404 +++++------------- .../services/LayoutActionServiceTest.java | 4 +- 5 files changed, 164 insertions(+), 309 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/bridge/Bridge.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/bridge/Bridge.java index 66eed49664..ae1e7c6e16 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/bridge/Bridge.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/bridge/Bridge.java @@ -37,6 +37,18 @@ public final class Bridge { return Bridge.query().equal(key, value); } + private static BridgeQuery notEqual(@NonNull String key, @NonNull String value) { + return Bridge.query().notEqual(key, value); + } + + public static BridgeQuery equal(@NonNull String key, @NonNull Enum value) { + return equal(key, value.name()); + } + + public static BridgeQuery notEqual(@NonNull String key, @NonNull Enum value) { + return notEqual(key, value.name()); + } + public static BridgeQuery equalIgnoreCase(@NonNull String key, @NonNull String value) { return Bridge.query().equalIgnoreCase(key, value); } @@ -53,6 +65,10 @@ public final class Bridge { return Bridge.query().exists(key); } + public static BridgeQuery isNull(@NonNull String key) { + return Bridge.query().isNull(key); + } + public static BridgeQuery isTrue(@NonNull String key) { return Bridge.query().isTrue(key); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/bridge/BridgeQuery.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/bridge/BridgeQuery.java index 4363546ab6..182917e5bd 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/bridge/BridgeQuery.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/bridge/BridgeQuery.java @@ -11,6 +11,7 @@ import java.util.Collection; import java.util.List; import java.util.regex.Pattern; +@SuppressWarnings("UnusedReturnValue") public final class BridgeQuery extends Criteria { final List checks = new ArrayList<>(); @@ -21,6 +22,19 @@ public final class BridgeQuery extends Criteria { return this; } + public BridgeQuery notEqual(@NonNull String key, @NonNull String value) { + checks.add(Criteria.where(key).ne(value)); + return this; + } + + public BridgeQuery equal(@NonNull String key, @NonNull Enum value) { + return equal(key, value.name()); + } + + public BridgeQuery notEqual(@NonNull String key, @NonNull Enum value) { + return notEqual(key, value.name()); + } + public BridgeQuery equalIgnoreCase(@NonNull String key, @NonNull String value) { checks.add(Criteria.where(key).regex("^" + Pattern.quote(value) + "$", "i")); return this; @@ -31,6 +45,14 @@ public final class BridgeQuery extends Criteria { return this; } + /** + * Prefer using `.isTrue()` or `.isFalse()` instead of this method **if possible**. + */ + public BridgeQuery equal(@NonNull String key, boolean value) { + checks.add(Criteria.where(key).is(value)); + return this; + } + public BridgeQuery in(@NonNull String key, @NonNull Collection value) { checks.add(Criteria.where(key).in(value)); return this; @@ -41,6 +63,21 @@ public final class BridgeQuery extends Criteria { return this; } + public BridgeQuery notExists(@NonNull String key) { + checks.add(Criteria.where(key).exists(false)); + return this; + } + + public BridgeQuery isNull(@NonNull String key) { + checks.add(Criteria.where(key).isNull()); + return this; + } + + public BridgeQuery isNotNull(@NonNull String key) { + checks.add(Criteria.where(key).ne(null)); + return this; + } + public BridgeQuery isTrue(@NonNull String key) { checks.add(Criteria.where(key).is(true)); return this; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewActionRepositoryCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewActionRepositoryCE.java index 7999a8c832..33965df367 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewActionRepositoryCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewActionRepositoryCE.java @@ -32,15 +32,9 @@ public interface CustomNewActionRepositoryCE extends AppsmithRepository findUnpublishedActionsByPageIdAndExecuteOnLoadSetByUserTrue( String pageId, AclPermission permission); - Flux findUnpublishedActionsForRestApiOnLoad( - Set names, String pageId, String httpMethod, Boolean userSetOnLoad, AclPermission aclPermission); - Flux findAllActionsByNameAndPageIdsAndViewMode( String name, List pageIds, Boolean viewMode, AclPermission aclPermission, Sort sort); - Flux findUnpublishedActionsByNameInAndPageIdAndExecuteOnLoadTrue( - Set names, String pageId, AclPermission permission); - Flux findByApplicationId(String applicationId, AclPermission aclPermission, Sort sort); Flux findByApplicationId( @@ -53,14 +47,8 @@ public interface CustomNewActionRepositoryCE extends AppsmithRepository findByBranchNameAndDefaultActionId( String branchName, String defaultActionId, AclPermission permission); - Mono findByGitSyncIdAndDefaultApplicationId( - String defaultApplicationId, String gitSyncId, AclPermission permission); - Flux findByDefaultApplicationId(String defaultApplicationId, Optional permission); - Mono findByGitSyncIdAndDefaultApplicationId( - String defaultApplicationId, String gitSyncId, Optional permission); - Flux findByPageIds(List pageIds, AclPermission permission); Flux findByPageIds(List pageIds, Optional permission); diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewActionRepositoryCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewActionRepositoryCEImpl.java index 4f259e58d7..47f444cbff 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewActionRepositoryCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewActionRepositoryCEImpl.java @@ -7,6 +7,8 @@ import com.appsmith.server.acl.AclPermission; import com.appsmith.server.constants.FieldName; import com.appsmith.server.domains.NewAction; import com.appsmith.server.dtos.PluginTypeAndCountDTO; +import com.appsmith.server.helpers.ce.bridge.Bridge; +import com.appsmith.server.helpers.ce.bridge.BridgeQuery; import com.appsmith.server.repositories.BaseAppsmithRepositoryImpl; import com.appsmith.server.repositories.CacheableRepositoryHelper; import lombok.extern.slf4j.Slf4j; @@ -26,7 +28,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.time.Instant; -import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; @@ -50,9 +51,8 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl< @Override public Flux findByApplicationId(String applicationId, AclPermission aclPermission) { - Criteria applicationIdCriteria = this.getCriterionForFindByApplicationId(applicationId); return queryBuilder() - .criteria(applicationIdCriteria) + .criteria(getCriterionForFindByApplicationId(applicationId)) .permission(aclPermission) .all(); } @@ -60,9 +60,8 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl< @Override public Flux findByApplicationId( String applicationId, Optional aclPermission, Optional sort) { - Criteria applicationIdCriteria = this.getCriterionForFindByApplicationId(applicationId); return queryBuilder() - .criteria(applicationIdCriteria) + .criteria(getCriterionForFindByApplicationId(applicationId)) .permission(aclPermission.orElse(null)) .sort(sort.orElse(null)) .all(); @@ -70,44 +69,28 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl< @Override public Mono findByUnpublishedNameAndPageId(String name, String pageId, AclPermission aclPermission) { - Criteria nameCriteria = where(NewAction.Fields.unpublishedAction_name).is(name); - Criteria pageCriteria = where(NewAction.Fields.unpublishedAction_pageId).is(pageId); - // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object would - // exist. To handle this, only fetch non-deleted actions - Criteria deletedCriteria = - where(NewAction.Fields.unpublishedAction_deletedAt).is(null); + final BridgeQuery q = Bridge.equal(NewAction.Fields.unpublishedAction_name, name) + .equal(NewAction.Fields.unpublishedAction_pageId, pageId) + // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object + // would exist. To handle this, only fetch non-deleted actions + .isNull(NewAction.Fields.unpublishedAction_deletedAt); - return queryBuilder() - .criteria(nameCriteria, pageCriteria, deletedCriteria) - .permission(aclPermission) - .one(); + return queryBuilder().criteria(q).permission(aclPermission).one(); } @Override public Flux findByPageId(String pageId, AclPermission aclPermission) { - String unpublishedPage = NewAction.Fields.unpublishedAction_pageId; - String publishedPage = NewAction.Fields.publishedAction_pageId; - - Criteria pageCriteria = new Criteria() - .orOperator( - where(unpublishedPage).is(pageId), where(publishedPage).is(pageId)); - - return queryBuilder().criteria(pageCriteria).permission(aclPermission).all(); + return queryBuilder() + .criteria(Bridge.or( + Bridge.equal(NewAction.Fields.unpublishedAction_pageId, pageId), + Bridge.equal(NewAction.Fields.publishedAction_pageId, pageId))) + .permission(aclPermission) + .all(); } @Override public Flux findByPageId(String pageId, Optional aclPermission) { - String unpublishedPage = NewAction.Fields.unpublishedAction_pageId; - String publishedPage = NewAction.Fields.publishedAction_pageId; - - Criteria pageCriteria = new Criteria() - .orOperator( - where(unpublishedPage).is(pageId), where(publishedPage).is(pageId)); - - return queryBuilder() - .criteria(pageCriteria) - .permission(aclPermission.orElse(null)) - .all(); + return findByPageId(pageId, aclPermission.orElse(null)); } @Override @@ -117,353 +100,212 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl< @Override public Flux findByPageIdAndViewMode(String pageId, Boolean viewMode, AclPermission aclPermission) { - - List criteria = new ArrayList<>(); - - Criteria pageCriterion; + final BridgeQuery q; // Fetch published actions if (Boolean.TRUE.equals(viewMode)) { - pageCriterion = where(NewAction.Fields.publishedAction_pageId).is(pageId); - criteria.add(pageCriterion); + q = Bridge.equal(NewAction.Fields.publishedAction_pageId, pageId); } // Fetch unpublished actions else { - pageCriterion = where(NewAction.Fields.unpublishedAction_pageId).is(pageId); - criteria.add(pageCriterion); + q = Bridge.equal(NewAction.Fields.unpublishedAction_pageId, pageId); // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object // would exist. To handle this, only fetch non-deleted actions - Criteria deletedCriteria = - where(NewAction.Fields.unpublishedAction_deletedAt).is(null); - criteria.add(deletedCriteria); + q.isNull(NewAction.Fields.unpublishedAction_deletedAt); } - return queryBuilder().criteria(criteria).permission(aclPermission).all(); - } - - @Override - public Flux findUnpublishedActionsForRestApiOnLoad( - Set names, String pageId, String httpMethod, Boolean userSetOnLoad, AclPermission aclPermission) { - Criteria namesCriteria = where(NewAction.Fields.unpublishedAction_name).in(names); - - Criteria pageCriteria = where(NewAction.Fields.unpublishedAction_pageId).is(pageId); - - Criteria userSetOnLoadCriteria = - where(NewAction.Fields.unpublishedAction_userSetOnLoad).is(userSetOnLoad); - - String httpMethodQueryKey = NewAction.Fields.unpublishedAction_actionConfiguration_httpMethod; - - Criteria httpMethodCriteria = where(httpMethodQueryKey).is(httpMethod); - List criterias = List.of(namesCriteria, pageCriteria, httpMethodCriteria, userSetOnLoadCriteria); - - return queryBuilder().criteria(criterias).permission(aclPermission).all(); + return queryBuilder().criteria(q).permission(aclPermission).all(); } @Override public Flux findAllActionsByNameAndPageIdsAndViewMode( String name, List pageIds, Boolean viewMode, AclPermission aclPermission, Sort sort) { - List criteriaList = - this.getCriteriaForFindAllActionsByNameAndPageIdsAndViewMode(name, pageIds, viewMode); - return queryBuilder() - .criteria(criteriaList) + .criteria(getCriteriaForFindAllActionsByNameAndPageIdsAndViewMode(name, pageIds, viewMode)) .permission(aclPermission) .sort(sort) .all(); } - protected List getCriteriaForFindAllActionsByNameAndPageIdsAndViewMode( + protected BridgeQuery getCriteriaForFindAllActionsByNameAndPageIdsAndViewMode( String name, List pageIds, Boolean viewMode) { - /** - * TODO : This function is called by get(params) to get all actions by params and hence - * only covers criteria of few fields like page id, name, etc. Make this generic to cover - * all possible fields - */ - List criteriaList = new ArrayList<>(); + final BridgeQuery q = Bridge.query(); // Fetch published actions if (Boolean.TRUE.equals(viewMode)) { if (name != null) { - Criteria nameCriteria = - where(NewAction.Fields.publishedAction_name).is(name); - criteriaList.add(nameCriteria); + q.equal(NewAction.Fields.publishedAction_name, name); } if (pageIds != null && !pageIds.isEmpty()) { - Criteria pageCriteria = - where(NewAction.Fields.publishedAction_pageId).in(pageIds); - criteriaList.add(pageCriteria); + q.in(NewAction.Fields.publishedAction_pageId, pageIds); } } // Fetch unpublished actions else { if (name != null) { - Criteria nameCriteria = - where(NewAction.Fields.unpublishedAction_name).is(name); - criteriaList.add(nameCriteria); + q.equal(NewAction.Fields.unpublishedAction_name, name); } if (pageIds != null && !pageIds.isEmpty()) { - Criteria pageCriteria = - where(NewAction.Fields.unpublishedAction_pageId).in(pageIds); - criteriaList.add(pageCriteria); + q.in(NewAction.Fields.unpublishedAction_pageId, pageIds); } // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object // would exist. To handle this, only fetch non-deleted actions - Criteria deletedCriteria = - where(NewAction.Fields.unpublishedAction_deletedAt).is(null); - criteriaList.add(deletedCriteria); + q.isNull(NewAction.Fields.unpublishedAction_deletedAt); } - return criteriaList; - } - @Override - public Flux findUnpublishedActionsByNameInAndPageIdAndExecuteOnLoadTrue( - Set names, String pageId, AclPermission permission) { - List criteriaList = new ArrayList<>(); - if (names != null) { - Criteria namesCriteria = - where(NewAction.Fields.unpublishedAction_name).in(names); - criteriaList.add(namesCriteria); - } - Criteria pageCriteria = where(NewAction.Fields.unpublishedAction_pageId).is(pageId); - criteriaList.add(pageCriteria); - - Criteria executeOnLoadCriteria = - where(NewAction.Fields.unpublishedAction_executeOnLoad).is(Boolean.TRUE); - criteriaList.add(executeOnLoadCriteria); - - // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object would - // exist. To handle this, only fetch non-deleted actions - Criteria deletedCriteria = - where(NewAction.Fields.unpublishedAction_deletedAt).is(null); - criteriaList.add(deletedCriteria); - - return queryBuilder().criteria(criteriaList).permission(permission).all(); + return q; } @Override public Flux findUnpublishedActionsByNameInAndPageId( Set names, String pageId, AclPermission permission) { - List criteriaList = new ArrayList<>(); + BridgeQuery q = Bridge.equal(NewAction.Fields.unpublishedAction_pageId, pageId); if (names != null) { - Criteria namesCriteria = - where(NewAction.Fields.unpublishedAction_name).in(names); - Criteria fullyQualifiedNamesCriteria = - where(NewAction.Fields.unpublishedAction_fullyQualifiedName).in(names); - criteriaList.add(new Criteria().orOperator(namesCriteria, fullyQualifiedNamesCriteria)); + q.or( + Bridge.in(NewAction.Fields.unpublishedAction_name, names), + Bridge.in(NewAction.Fields.unpublishedAction_fullyQualifiedName, names)); } - Criteria pageCriteria = where(NewAction.Fields.unpublishedAction_pageId).is(pageId); - criteriaList.add(pageCriteria); // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object would // exist. To handle this, only fetch non-deleted actions - Criteria deletedCriteria = - where(NewAction.Fields.unpublishedAction_deletedAt).is(null); - criteriaList.add(deletedCriteria); + q.isNull(NewAction.Fields.unpublishedAction_deletedAt); - return queryBuilder().criteria(criteriaList).permission(permission).all(); + return queryBuilder().criteria(q).permission(permission).all(); } @Override public Flux findUnpublishedActionsByPageIdAndExecuteOnLoadSetByUserTrue( String pageId, AclPermission permission) { - List criteriaList = new ArrayList<>(); + BridgeQuery q = Bridge.isTrue(NewAction.Fields.unpublishedAction_executeOnLoad) + .isTrue(NewAction.Fields.unpublishedAction_userSetOnLoad) + .equal(NewAction.Fields.unpublishedAction_pageId, pageId) + // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object + // would exist. To handle this, only fetch non-deleted actions + .isNull(NewAction.Fields.unpublishedAction_deletedAt); - Criteria executeOnLoadCriteria = - where(NewAction.Fields.unpublishedAction_executeOnLoad).is(Boolean.TRUE); - criteriaList.add(executeOnLoadCriteria); - - Criteria setByUserCriteria = - where(NewAction.Fields.unpublishedAction_userSetOnLoad).is(Boolean.TRUE); - criteriaList.add(setByUserCriteria); - - Criteria pageCriteria = where(NewAction.Fields.unpublishedAction_pageId).is(pageId); - criteriaList.add(pageCriteria); - - // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object would - // exist. To handle this, only fetch non-deleted actions - Criteria deletedCriteria = - where(NewAction.Fields.unpublishedAction_deletedAt).is(null); - criteriaList.add(deletedCriteria); - - return queryBuilder().criteria(criteriaList).permission(permission).all(); + return queryBuilder().criteria(q).permission(permission).all(); } @Override public Flux findByApplicationId(String applicationId, AclPermission aclPermission, Sort sort) { - - Criteria applicationCriteria = this.getCriterionForFindByApplicationId(applicationId); - return queryBuilder() - .criteria(applicationCriteria) + .criteria(getCriterionForFindByApplicationId(applicationId)) .permission(aclPermission) .sort(sort) .all(); } - protected Criteria getCriterionForFindByApplicationId(String applicationId) { - Criteria applicationCriteria = where(NewAction.Fields.applicationId).is(applicationId); - return applicationCriteria; + protected BridgeQuery getCriterionForFindByApplicationId(String applicationId) { + return Bridge.equal(NewAction.Fields.applicationId, applicationId); } @Override public Flux findByApplicationIdAndViewMode( String applicationId, Boolean viewMode, AclPermission aclPermission) { - - List criteria = this.getCriteriaForFindByApplicationIdAndViewMode(applicationId, viewMode); - - return queryBuilder().criteria(criteria).permission(aclPermission).all(); + return queryBuilder() + .criteria(getCriteriaForFindByApplicationIdAndViewMode(applicationId, viewMode)) + .permission(aclPermission) + .all(); } - protected List getCriteriaForFindByApplicationIdAndViewMode(String applicationId, Boolean viewMode) { - List criteria = new ArrayList<>(); - - Criteria applicationCriterion = this.getCriterionForFindByApplicationId(applicationId); - criteria.add(applicationCriterion); + protected BridgeQuery getCriteriaForFindByApplicationIdAndViewMode( + String applicationId, Boolean viewMode) { + final BridgeQuery q = getCriterionForFindByApplicationId(applicationId); if (Boolean.FALSE.equals(viewMode)) { // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object // would exist. To handle this, only fetch non-deleted actions - Criteria deletedCriterion = - where(NewAction.Fields.unpublishedAction_deletedAt).is(null); - criteria.add(deletedCriterion); + q.isNull(NewAction.Fields.unpublishedAction_deletedAt); } - return criteria; + + return q; } @Override public Mono countByDatasourceId(String datasourceId) { - Criteria unpublishedDatasourceCriteria = - where(NewAction.Fields.unpublishedAction + ".datasource._id").is(new ObjectId(datasourceId)); - Criteria publishedDatasourceCriteria = - where(NewAction.Fields.publishedAction + ".datasource._id").is(new ObjectId(datasourceId)); + BridgeQuery q = Bridge.or( + Bridge.equal(NewAction.Fields.unpublishedAction + ".datasource._id", new ObjectId(datasourceId)), + Bridge.equal(NewAction.Fields.publishedAction + ".datasource._id", new ObjectId(datasourceId))); - Criteria datasourceCriteria = - new Criteria().orOperator(unpublishedDatasourceCriteria, publishedDatasourceCriteria); - - return queryBuilder().criteria(datasourceCriteria).count(); + return queryBuilder().criteria(q).count(); } @Override public Mono findByBranchNameAndDefaultActionId( String branchName, String defaultActionId, AclPermission permission) { final String defaultResources = NewAction.Fields.defaultResources; - Criteria defaultActionIdCriteria = - where(defaultResources + "." + FieldName.ACTION_ID).is(defaultActionId); - Criteria branchCriteria = - where(defaultResources + "." + FieldName.BRANCH_NAME).is(branchName); - return queryBuilder() - .criteria(defaultActionIdCriteria, branchCriteria) - .permission(permission) - .one(); - } - - @Override - public Mono findByGitSyncIdAndDefaultApplicationId( - String defaultApplicationId, String gitSyncId, AclPermission permission) { - return findByGitSyncIdAndDefaultApplicationId(defaultApplicationId, gitSyncId, Optional.ofNullable(permission)); - } - - @Override - public Mono findByGitSyncIdAndDefaultApplicationId( - String defaultApplicationId, String gitSyncId, Optional permission) { - final String defaultResources = BranchAwareDomain.Fields.defaultResources; - Criteria defaultAppIdCriteria = - where(defaultResources + "." + FieldName.APPLICATION_ID).is(defaultApplicationId); - Criteria gitSyncIdCriteria = where(FieldName.GIT_SYNC_ID).is(gitSyncId); - return queryBuilder() - .criteria(defaultAppIdCriteria, gitSyncIdCriteria) - .permission(permission.orElse(null)) - .first(); + final BridgeQuery q = Bridge.equal( + defaultResources + "." + FieldName.ACTION_ID, defaultActionId) + .equal(defaultResources + "." + FieldName.BRANCH_NAME, branchName); + return queryBuilder().criteria(q).permission(permission).one(); } @Override public Flux findByPageIds(List pageIds, AclPermission permission) { - - Criteria pageIdCriteria = - where(NewAction.Fields.unpublishedAction_pageId).in(pageIds); - - return queryBuilder().criteria(pageIdCriteria).permission(permission).all(); + return queryBuilder() + .criteria(Bridge.in(NewAction.Fields.unpublishedAction_pageId, pageIds)) + .permission(permission) + .all(); } @Override + @Deprecated public Flux findByPageIds(List pageIds, Optional permission) { - Criteria pageIdCriteria = - where(NewAction.Fields.unpublishedAction_pageId).in(pageIds); - - return queryBuilder() - .criteria(pageIdCriteria) - .permission(permission.orElse(null)) - .all(); + return findByPageIds(pageIds, permission.orElse(null)); } @Override public Flux findNonJsActionsByApplicationIdAndViewMode( String applicationId, Boolean viewMode, AclPermission aclPermission) { - List criteria = - this.getCriteriaForFindNonJsActionsByApplicationIdAndViewMode(applicationId, viewMode); - - return queryBuilder().criteria(criteria).permission(aclPermission).all(); + return queryBuilder() + .criteria(getCriteriaForFindNonJsActionsByApplicationIdAndViewMode(applicationId, viewMode)) + .permission(aclPermission) + .all(); } - protected List getCriteriaForFindNonJsActionsByApplicationIdAndViewMode( + protected BridgeQuery getCriteriaForFindNonJsActionsByApplicationIdAndViewMode( String applicationId, Boolean viewMode) { - List criteria = new ArrayList<>(); - - Criteria applicationCriterion = this.getCriterionForFindByApplicationId(applicationId); - criteria.add(applicationCriterion); - - Criteria nonJsTypeCriteria = where(NewAction.Fields.pluginType).ne(PluginType.JS); - criteria.add(nonJsTypeCriteria); + final BridgeQuery q = + getCriterionForFindByApplicationId(applicationId).notEqual(NewAction.Fields.pluginType, PluginType.JS); if (Boolean.FALSE.equals(viewMode)) { // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object // would exist. To handle this, only fetch non-deleted actions - Criteria deletedCriterion = - where(NewAction.Fields.unpublishedAction_deletedAt).is(null); - criteria.add(deletedCriterion); + q.isNull(NewAction.Fields.unpublishedAction_deletedAt); } - return criteria; + + return q; } @Override public Flux findAllNonJsActionsByNameAndPageIdsAndViewMode( String name, List pageIds, Boolean viewMode, AclPermission aclPermission, Sort sort) { - List criteriaList = - this.getCriteriaForFindAllNonJsActionsByNameAndPageIdsAndViewMode(name, pageIds, viewMode); - return queryBuilder() - .criteria(criteriaList) + .criteria(getCriteriaForFindAllNonJsActionsByNameAndPageIdsAndViewMode(name, pageIds, viewMode)) .permission(aclPermission) .sort(sort) .all(); } - protected List getCriteriaForFindAllNonJsActionsByNameAndPageIdsAndViewMode( + protected BridgeQuery getCriteriaForFindAllNonJsActionsByNameAndPageIdsAndViewMode( String name, List pageIds, Boolean viewMode) { - List criteriaList = new ArrayList<>(); - - Criteria nonJsTypeCriteria = where(NewAction.Fields.pluginType).ne(PluginType.JS); - criteriaList.add(nonJsTypeCriteria); + final BridgeQuery q = Bridge.notEqual(NewAction.Fields.pluginType, PluginType.JS); // Fetch published actions if (Boolean.TRUE.equals(viewMode)) { if (name != null) { - Criteria nameCriteria = - where(NewAction.Fields.publishedAction_name).is(name); - criteriaList.add(nameCriteria); + q.equal(NewAction.Fields.publishedAction_name, name); } if (pageIds != null && !pageIds.isEmpty()) { - Criteria pageCriteria = - where(NewAction.Fields.publishedAction_pageId).in(pageIds); - criteriaList.add(pageCriteria); + q.in(NewAction.Fields.publishedAction_pageId, pageIds); } } @@ -471,44 +313,37 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl< else { if (name != null) { - Criteria nameCriteria = - where(NewAction.Fields.unpublishedAction_name).is(name); - criteriaList.add(nameCriteria); + q.equal(NewAction.Fields.unpublishedAction_name, name); } if (pageIds != null && !pageIds.isEmpty()) { - Criteria pageCriteria = - where(NewAction.Fields.unpublishedAction_pageId).in(pageIds); - criteriaList.add(pageCriteria); + q.in(NewAction.Fields.unpublishedAction_pageId, pageIds); } // In case an action has been deleted in edit mode, but still exists in deployed mode, NewAction object // would exist. To handle this, only fetch non-deleted actions - Criteria deletedCriteria = - where(NewAction.Fields.unpublishedAction_deletedAt).is(null); - criteriaList.add(deletedCriteria); + q.isNull(NewAction.Fields.unpublishedAction_deletedAt); } - return criteriaList; + + return q; } @Override public Flux findByDefaultApplicationId(String defaultApplicationId, Optional permission) { final String defaultResources = BranchAwareDomain.Fields.defaultResources; - Criteria defaultAppIdCriteria = - where(defaultResources + "." + FieldName.APPLICATION_ID).is(defaultApplicationId); return queryBuilder() - .criteria(defaultAppIdCriteria) + .criteria(Bridge.equal(defaultResources + "." + FieldName.APPLICATION_ID, defaultApplicationId)) .permission(permission.orElse(null)) .all(); } @Override public Mono publishActions(String applicationId, AclPermission permission) { - Criteria applicationIdCriteria = this.getCriterionForFindByApplicationId(applicationId); - return copyUnpublishedActionToPublishedAction(applicationIdCriteria, permission); + return copyUnpublishedActionToPublishedAction(getCriterionForFindByApplicationId(applicationId), permission); } - protected Mono copyUnpublishedActionToPublishedAction(Criteria criteria, AclPermission permission) { + protected Mono copyUnpublishedActionToPublishedAction( + BridgeQuery criteria, AclPermission permission) { Mono> permissionGroupsMono = getCurrentUserPermissionGroupsIfRequired(Optional.ofNullable(permission)); @@ -537,18 +372,13 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl< @Override public Mono archiveDeletedUnpublishedActions(String applicationId, AclPermission permission) { - Criteria applicationIdCriteria = this.getCriterionForFindByApplicationId(applicationId); - String unpublishedDeletedAtFieldName = NewAction.Fields.unpublishedAction_deletedAt; - Criteria deletedFromUnpublishedCriteria = - where(unpublishedDeletedAtFieldName).ne(null); + final BridgeQuery q = getCriterionForFindByApplicationId(applicationId) + .isNotNull(NewAction.Fields.unpublishedAction_deletedAt); Update update = new Update(); update.set(FieldName.DELETED, true); update.set(FieldName.DELETED_AT, Instant.now()); - return queryBuilder() - .criteria(applicationIdCriteria, deletedFromUnpublishedCriteria) - .permission(permission) - .updateAll(update); + return queryBuilder().criteria(q).permission(permission).updateAll(update); } @Override @@ -566,9 +396,8 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl< @Override public Flux findAllByApplicationIdsWithoutPermission( List applicationIds, List includeFields) { - Criteria applicationCriteria = Criteria.where(FieldName.APPLICATION_ID).in(applicationIds); return queryBuilder() - .criteria(applicationCriteria) + .criteria(Bridge.in(NewAction.Fields.applicationId, applicationIds)) .fields(includeFields) .all(); } @@ -576,48 +405,33 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl< @Override public Flux findAllUnpublishedActionsByContextIdAndContextType( String contextId, CreatorContextType contextType, AclPermission permission, boolean includeJs) { - List criteriaList = new ArrayList<>(); - String contextIdPath = NewAction.Fields.unpublishedAction_pageId; String contextTypePath = NewAction.Fields.unpublishedAction_contextType; - Criteria contextTypeCriterion = new Criteria() - .orOperator( - where(contextTypePath).is(contextType), - where(contextTypePath).isNull()); - Criteria contextIdAndContextTypeCriteria = - where(contextIdPath).is(contextId).andOperator(contextTypeCriterion); - - criteriaList.add(contextIdAndContextTypeCriteria); + final BridgeQuery q = Bridge.or( + Bridge.equal(contextTypePath, contextType), Bridge.isNull(contextTypePath)) + .equal(contextIdPath, contextId); if (!includeJs) { - Criteria jsInclusionOrExclusionCriteria = - where(NewAction.Fields.pluginType).ne(PluginType.JS); - criteriaList.add(jsInclusionOrExclusionCriteria); + q.notEqual(NewAction.Fields.pluginType, PluginType.JS); } - return queryBuilder().criteria(criteriaList).permission(permission).all(); + return queryBuilder().criteria(q).permission(permission).all(); } @Override public Flux findAllPublishedActionsByContextIdAndContextType( String contextId, CreatorContextType contextType, AclPermission permission, boolean includeJs) { - List criteriaList = new ArrayList<>(); String contextIdPath = NewAction.Fields.publishedAction_pageId; String contextTypePath = NewAction.Fields.publishedAction_contextType; - Criteria contextIdAndContextTypeCriteria = - where(contextIdPath).is(contextId).and(contextTypePath).is(contextType); + final BridgeQuery q = + Bridge.equal(contextIdPath, contextId).equal(contextTypePath, contextType); - criteriaList.add(contextIdAndContextTypeCriteria); - - Criteria jsInclusionOrExclusionCriteria; if (includeJs) { - jsInclusionOrExclusionCriteria = where(NewAction.Fields.pluginType).is(PluginType.JS); + q.equal(NewAction.Fields.pluginType, PluginType.JS); } else { - jsInclusionOrExclusionCriteria = where(NewAction.Fields.pluginType).ne(PluginType.JS); + q.notEqual(NewAction.Fields.pluginType, PluginType.JS); } - criteriaList.add(jsInclusionOrExclusionCriteria); - - return queryBuilder().criteria(criteriaList).permission(permission).all(); + return queryBuilder().criteria(q).permission(permission).all(); } } diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/LayoutActionServiceTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/LayoutActionServiceTest.java index 4712291bc4..cb453bc0ab 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/LayoutActionServiceTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/LayoutActionServiceTest.java @@ -1127,7 +1127,7 @@ public class LayoutActionServiceTest { newActionArray[0] = newAction1; newActionArray[1] = newAction2; Flux newActionFlux = Flux.fromArray(newActionArray); - Mockito.when(newActionService.findUnpublishedOnLoadActionsExplicitSetByUserInPage(Mockito.any())) + Mockito.when(newActionService.findUnpublishedOnLoadActionsExplicitSetByUserInPage(Mockito.anyString())) .thenReturn(newActionFlux); Mono updateLayoutMono = @@ -1199,7 +1199,7 @@ public class LayoutActionServiceTest { NewAction[] newActionArray = new NewAction[1]; newActionArray[0] = newAction1; Flux newActionFlux = Flux.fromArray(newActionArray); - Mockito.when(newActionService.findUnpublishedOnLoadActionsExplicitSetByUserInPage(Mockito.any())) + Mockito.when(newActionService.findUnpublishedOnLoadActionsExplicitSetByUserInPage(Mockito.anyString())) .thenReturn(newActionFlux); Mono updateLayoutMono =