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 629b8ca03f..643c98b003 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 @@ -88,14 +88,6 @@ public final class BridgeQuery extends Criteria { return this; } - /** - * Please use {@code Bridge.or} instead. This API looks and reads very confusing and unintuitive, so is explicitly - * disabled. - */ - public BridgeQuery or(BridgeQuery ignoredUnused) { - throw new UnsupportedOperationException("Not supported"); - } - public BridgeQuery and(BridgeQuery item) { checks.add(new Criteria().andOperator(item)); return this; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewPageRepositoryCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewPageRepositoryCEImpl.java index dbd43248ca..ea028ac40d 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewPageRepositoryCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewPageRepositoryCEImpl.java @@ -3,8 +3,11 @@ package com.appsmith.server.repositories.ce; import com.appsmith.external.models.BranchAwareDomain; import com.appsmith.server.acl.AclPermission; import com.appsmith.server.constants.FieldName; +import com.appsmith.server.domains.Layout; import com.appsmith.server.domains.NewPage; import com.appsmith.server.dtos.PageDTO; +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; @@ -19,7 +22,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Optional; @@ -44,44 +46,35 @@ public class CustomNewPageRepositoryCEImpl extends BaseAppsmithRepositoryImpl findByApplicationId(String applicationId, AclPermission aclPermission) { - Criteria applicationIdCriteria = where(NewPage.Fields.applicationId).is(applicationId); return queryBuilder() - .criteria(applicationIdCriteria) + .criteria(Bridge.equal(NewPage.Fields.applicationId, applicationId)) .permission(aclPermission) .all(); } @Override public Flux findByApplicationId(String applicationId, Optional permission) { - Criteria applicationIdCriteria = where(NewPage.Fields.applicationId).is(applicationId); return queryBuilder() - .criteria(applicationIdCriteria) + .criteria(Bridge.equal(NewPage.Fields.applicationId, applicationId)) .permission(permission.orElse(null)) .all(); } @Override public Flux findByApplicationIdAndNonDeletedEditMode(String applicationId, AclPermission aclPermission) { - Criteria applicationIdCriteria = where(NewPage.Fields.applicationId).is(applicationId); - // In case a page has been deleted in edit mode, but still exists in deployed mode, NewPage object would exist. - // To handle this, only fetch non-deleted pages - Criteria activeEditModeCriteria = - where(NewPage.Fields.unpublishedPage_deletedAt).is(null); - return queryBuilder() - .criteria(applicationIdCriteria, activeEditModeCriteria) - .permission(aclPermission) - .all(); + BridgeQuery q = Bridge.equal(NewPage.Fields.applicationId, applicationId) + // In case a page has been deleted in edit mode, but still exists in deployed mode, NewPage object would + // exist. To handle this, only fetch non-deleted pages + .isNull(NewPage.Fields.unpublishedPage_deletedAt); + return queryBuilder().criteria(q).permission(aclPermission).all(); } @Override public Mono findByIdAndLayoutsIdAndViewMode( String id, String layoutId, AclPermission aclPermission, Boolean viewMode) { - String layoutsIdKey; - String layoutsKey; + final String layoutsKey; - List criteria = new ArrayList<>(); - Criteria idCriterion = getIdCriteria(id); - criteria.add(idCriterion); + final BridgeQuery q = Bridge.equal(NewPage.Fields.id, id); if (Boolean.TRUE.equals(viewMode)) { layoutsKey = NewPage.Fields.publishedPage_layouts; @@ -90,58 +83,39 @@ public class CustomNewPageRepositoryCEImpl extends BaseAppsmithRepositoryImpl findByNameAndViewMode(String name, AclPermission aclPermission, Boolean viewMode) { - - List criteria = new ArrayList<>(); - - Criteria nameCriterion = getNameCriterion(name, viewMode); - criteria.add(nameCriterion); + final BridgeQuery q = getNameCriterion(name, viewMode); if (Boolean.FALSE.equals(viewMode)) { // In case a page has been deleted in edit mode, but still exists in deployed mode, NewPage object would // exist. To handle this, only fetch non-deleted pages - Criteria deletedCriterion = - where(NewPage.Fields.unpublishedPage_deletedAt).is(null); - criteria.add(deletedCriterion); + q.isNull(NewPage.Fields.unpublishedPage_deletedAt); } - return queryBuilder().criteria(criteria).permission(aclPermission).one(); + return queryBuilder().criteria(q).permission(aclPermission).one(); } @Override public Mono findByNameAndApplicationIdAndViewMode( String name, String applicationId, AclPermission aclPermission, Boolean viewMode) { - - List criteria = new ArrayList<>(); - - Criteria nameCriterion = getNameCriterion(name, viewMode); - criteria.add(nameCriterion); - - Criteria applicationIdCriterion = where(NewPage.Fields.applicationId).is(applicationId); - criteria.add(applicationIdCriterion); + BridgeQuery q = getNameCriterion(name, viewMode).equal(NewPage.Fields.applicationId, applicationId); if (Boolean.FALSE.equals(viewMode)) { // In case a page has been deleted in edit mode, but still exists in deployed mode, NewPage object would // exist. To handle this, only fetch non-deleted pages - Criteria deletedCriteria = - where(NewPage.Fields.unpublishedPage_deletedAt).is(null); - criteria.add(deletedCriteria); + q.isNull(NewPage.Fields.unpublishedPage_deletedAt); } - return queryBuilder().criteria(criteria).permission(aclPermission).one(); + return queryBuilder().criteria(q).permission(aclPermission).one(); } @Override @@ -161,24 +135,17 @@ public class CustomNewPageRepositoryCEImpl extends BaseAppsmithRepositoryImpl getNameCriterion(String name, Boolean viewMode) { + return Bridge.equal( + Boolean.TRUE.equals(viewMode) ? NewPage.Fields.publishedPage_name : NewPage.Fields.unpublishedPage_name, + name); } @Override @@ -197,22 +164,18 @@ public class CustomNewPageRepositoryCEImpl extends BaseAppsmithRepositoryImpl findPageByBranchNameAndDefaultPageId( String branchName, String defaultPageId, AclPermission permission) { final String defaultResources = NewPage.Fields.defaultResources; - Criteria defaultPageIdCriteria = - where(defaultResources + "." + FieldName.PAGE_ID).is(defaultPageId); - Criteria branchCriteria = - where(defaultResources + "." + FieldName.BRANCH_NAME).is(branchName); - return queryBuilder() - .criteria(defaultPageIdCriteria, branchCriteria) - .permission(permission) - .one(); + final BridgeQuery q = + // defaultPageIdCriteria + Bridge.equal(defaultResources + "." + FieldName.PAGE_ID, defaultPageId) + // branchCriteria + .equal(defaultResources + "." + FieldName.BRANCH_NAME, branchName); + return queryBuilder().criteria(q).permission(permission).one(); } @Override public Flux findSlugsByApplicationIds(List applicationIds, AclPermission aclPermission) { - Criteria applicationIdCriteria = where(NewPage.Fields.applicationId).in(applicationIds); - return queryBuilder() - .criteria(applicationIdCriteria) + .criteria(Bridge.in(NewPage.Fields.applicationId, applicationIds)) .fields( NewPage.Fields.unpublishedPage_slug, NewPage.Fields.unpublishedPage_customSlug, @@ -233,13 +196,19 @@ public class CustomNewPageRepositoryCEImpl extends BaseAppsmithRepositoryImpl 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(); + + // defaultAppIdCriteria + final BridgeQuery q = + Bridge.equal(defaultResources + "." + NewPage.Fields.applicationId, defaultApplicationId); + + if (gitSyncId != null) { + // gitSyncIdCriteria + q.equal(NewPage.Fields.gitSyncId, gitSyncId); + } else { + q.isNull(NewPage.Fields.gitSyncId); + } + + return queryBuilder().criteria(q).permission(permission.orElse(null)).first(); } @Override @@ -277,9 +246,8 @@ public class CustomNewPageRepositoryCEImpl extends BaseAppsmithRepositoryImpl findAllByApplicationIdsWithoutPermission( List applicationIds, List includeFields) { - Criteria applicationCriteria = Criteria.where(FieldName.APPLICATION_ID).in(applicationIds); return queryBuilder() - .criteria(applicationCriteria) + .criteria(Bridge.in(FieldName.APPLICATION_ID, applicationIds)) .fields(includeFields) .all(); }