chore: Migrate NewPageRepositoryCEImpl to use Bridge APIs (#31693)

This commit is contained in:
Shrikant Sharat Kandula 2024-03-13 11:11:12 +05:30 committed by GitHub
parent 32640eea0b
commit 0d206ebfbd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 47 additions and 87 deletions

View File

@ -88,14 +88,6 @@ public final class BridgeQuery<T extends BaseDomain> 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<T> or(BridgeQuery<T> ignoredUnused) {
throw new UnsupportedOperationException("Not supported");
}
public BridgeQuery<T> and(BridgeQuery<T> item) {
checks.add(new Criteria().andOperator(item));
return this;

View File

@ -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<Ne
@Override
public Flux<NewPage> 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<NewPage> findByApplicationId(String applicationId, Optional<AclPermission> 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<NewPage> 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<NewPage> q = Bridge.<NewPage>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<NewPage> findByIdAndLayoutsIdAndViewMode(
String id, String layoutId, AclPermission aclPermission, Boolean viewMode) {
String layoutsIdKey;
String layoutsKey;
final String layoutsKey;
List<Criteria> criteria = new ArrayList<>();
Criteria idCriterion = getIdCriteria(id);
criteria.add(idCriterion);
final BridgeQuery<NewPage> 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<Ne
// 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);
}
layoutsIdKey = layoutsKey + "." + FieldName.ID;
Criteria layoutCriterion = where(layoutsIdKey).is(layoutId);
criteria.add(layoutCriterion);
q.equal(layoutsKey + "." + Layout.Fields.id, layoutId);
return queryBuilder().criteria(criteria).permission(aclPermission).one();
return queryBuilder().criteria(q).permission(aclPermission).one();
}
@Override
public Mono<NewPage> findByNameAndViewMode(String name, AclPermission aclPermission, Boolean viewMode) {
List<Criteria> criteria = new ArrayList<>();
Criteria nameCriterion = getNameCriterion(name, viewMode);
criteria.add(nameCriterion);
final BridgeQuery<NewPage> 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<NewPage> findByNameAndApplicationIdAndViewMode(
String name, String applicationId, AclPermission aclPermission, Boolean viewMode) {
List<Criteria> criteria = new ArrayList<>();
Criteria nameCriterion = getNameCriterion(name, viewMode);
criteria.add(nameCriterion);
Criteria applicationIdCriterion = where(NewPage.Fields.applicationId).is(applicationId);
criteria.add(applicationIdCriterion);
BridgeQuery<NewPage> 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<Ne
NewPage.Fields.publishedPage_slug,
NewPage.Fields.publishedPage_customSlug);
Criteria idsCriterion = where("id").in(ids);
return this.queryBuilder()
.criteria(idsCriterion)
.criteria(Bridge.in(NewPage.Fields.id, ids))
.fields(includedFields)
.permission(aclPermission)
.all();
}
private Criteria getNameCriterion(String name, Boolean viewMode) {
String nameKey;
if (Boolean.TRUE.equals(viewMode)) {
nameKey = NewPage.Fields.publishedPage_name;
} else {
nameKey = NewPage.Fields.unpublishedPage_name;
}
return where(nameKey).is(name);
private BridgeQuery<NewPage> 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<Ne
public Mono<NewPage> 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<NewPage> q =
// defaultPageIdCriteria
Bridge.<NewPage>equal(defaultResources + "." + FieldName.PAGE_ID, defaultPageId)
// branchCriteria
.equal(defaultResources + "." + FieldName.BRANCH_NAME, branchName);
return queryBuilder().criteria(q).permission(permission).one();
}
@Override
public Flux<NewPage> findSlugsByApplicationIds(List<String> 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<Ne
public Mono<NewPage> findByGitSyncIdAndDefaultApplicationId(
String defaultApplicationId, String gitSyncId, Optional<AclPermission> 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<NewPage> 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<Ne
@Override
public Flux<NewPage> findAllByApplicationIdsWithoutPermission(
List<String> applicationIds, List<String> includeFields) {
Criteria applicationCriteria = Criteria.where(FieldName.APPLICATION_ID).in(applicationIds);
return queryBuilder()
.criteria(applicationCriteria)
.criteria(Bridge.in(FieldName.APPLICATION_ID, applicationIds))
.fields(includeFields)
.all();
}