chore: Migrate NewAction repo to Bridge APIs (#31632)

This commit is contained in:
Shrikant Sharat Kandula 2024-03-12 11:24:15 +05:30 committed by GitHub
parent c5c3dc4caf
commit 350d89b98e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 164 additions and 309 deletions

View File

@ -37,6 +37,18 @@ public final class Bridge {
return Bridge.<T>query().equal(key, value);
}
private static <T extends BaseDomain> BridgeQuery<T> notEqual(@NonNull String key, @NonNull String value) {
return Bridge.<T>query().notEqual(key, value);
}
public static <T extends BaseDomain> BridgeQuery<T> equal(@NonNull String key, @NonNull Enum<?> value) {
return equal(key, value.name());
}
public static <T extends BaseDomain> BridgeQuery<T> notEqual(@NonNull String key, @NonNull Enum<?> value) {
return notEqual(key, value.name());
}
public static <T extends BaseDomain> BridgeQuery<T> equalIgnoreCase(@NonNull String key, @NonNull String value) {
return Bridge.<T>query().equalIgnoreCase(key, value);
}
@ -53,6 +65,10 @@ public final class Bridge {
return Bridge.<T>query().exists(key);
}
public static <T extends BaseDomain> BridgeQuery<T> isNull(@NonNull String key) {
return Bridge.<T>query().isNull(key);
}
public static <T extends BaseDomain> BridgeQuery<T> isTrue(@NonNull String key) {
return Bridge.<T>query().isTrue(key);
}

View File

@ -11,6 +11,7 @@ import java.util.Collection;
import java.util.List;
import java.util.regex.Pattern;
@SuppressWarnings("UnusedReturnValue")
public final class BridgeQuery<T extends BaseDomain> extends Criteria {
final List<Criteria> checks = new ArrayList<>();
@ -21,6 +22,19 @@ public final class BridgeQuery<T extends BaseDomain> extends Criteria {
return this;
}
public BridgeQuery<T> notEqual(@NonNull String key, @NonNull String value) {
checks.add(Criteria.where(key).ne(value));
return this;
}
public BridgeQuery<T> equal(@NonNull String key, @NonNull Enum<?> value) {
return equal(key, value.name());
}
public BridgeQuery<T> notEqual(@NonNull String key, @NonNull Enum<?> value) {
return notEqual(key, value.name());
}
public BridgeQuery<T> 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<T extends BaseDomain> extends Criteria {
return this;
}
/**
* Prefer using `.isTrue()` or `.isFalse()` instead of this method **if possible**.
*/
public BridgeQuery<T> equal(@NonNull String key, boolean value) {
checks.add(Criteria.where(key).is(value));
return this;
}
public BridgeQuery<T> in(@NonNull String key, @NonNull Collection<String> value) {
checks.add(Criteria.where(key).in(value));
return this;
@ -41,6 +63,21 @@ public final class BridgeQuery<T extends BaseDomain> extends Criteria {
return this;
}
public BridgeQuery<T> notExists(@NonNull String key) {
checks.add(Criteria.where(key).exists(false));
return this;
}
public BridgeQuery<T> isNull(@NonNull String key) {
checks.add(Criteria.where(key).isNull());
return this;
}
public BridgeQuery<T> isNotNull(@NonNull String key) {
checks.add(Criteria.where(key).ne(null));
return this;
}
public BridgeQuery<T> isTrue(@NonNull String key) {
checks.add(Criteria.where(key).is(true));
return this;

View File

@ -32,15 +32,9 @@ public interface CustomNewActionRepositoryCE extends AppsmithRepository<NewActio
Flux<NewAction> findUnpublishedActionsByPageIdAndExecuteOnLoadSetByUserTrue(
String pageId, AclPermission permission);
Flux<NewAction> findUnpublishedActionsForRestApiOnLoad(
Set<String> names, String pageId, String httpMethod, Boolean userSetOnLoad, AclPermission aclPermission);
Flux<NewAction> findAllActionsByNameAndPageIdsAndViewMode(
String name, List<String> pageIds, Boolean viewMode, AclPermission aclPermission, Sort sort);
Flux<NewAction> findUnpublishedActionsByNameInAndPageIdAndExecuteOnLoadTrue(
Set<String> names, String pageId, AclPermission permission);
Flux<NewAction> findByApplicationId(String applicationId, AclPermission aclPermission, Sort sort);
Flux<NewAction> findByApplicationId(
@ -53,14 +47,8 @@ public interface CustomNewActionRepositoryCE extends AppsmithRepository<NewActio
Mono<NewAction> findByBranchNameAndDefaultActionId(
String branchName, String defaultActionId, AclPermission permission);
Mono<NewAction> findByGitSyncIdAndDefaultApplicationId(
String defaultApplicationId, String gitSyncId, AclPermission permission);
Flux<NewAction> findByDefaultApplicationId(String defaultApplicationId, Optional<AclPermission> permission);
Mono<NewAction> findByGitSyncIdAndDefaultApplicationId(
String defaultApplicationId, String gitSyncId, Optional<AclPermission> permission);
Flux<NewAction> findByPageIds(List<String> pageIds, AclPermission permission);
Flux<NewAction> findByPageIds(List<String> pageIds, Optional<AclPermission> permission);

View File

@ -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<NewAction> 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<NewAction> findByApplicationId(
String applicationId, Optional<AclPermission> aclPermission, Optional<Sort> 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<NewAction> 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<NewAction> q = Bridge.<NewAction>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<NewAction> 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<NewAction> findByPageId(String pageId, Optional<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.orElse(null))
.all();
return findByPageId(pageId, aclPermission.orElse(null));
}
@Override
@ -117,353 +100,212 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl<
@Override
public Flux<NewAction> findByPageIdAndViewMode(String pageId, Boolean viewMode, AclPermission aclPermission) {
List<Criteria> criteria = new ArrayList<>();
Criteria pageCriterion;
final BridgeQuery<NewAction> 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<NewAction> findUnpublishedActionsForRestApiOnLoad(
Set<String> 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<Criteria> criterias = List.of(namesCriteria, pageCriteria, httpMethodCriteria, userSetOnLoadCriteria);
return queryBuilder().criteria(criterias).permission(aclPermission).all();
return queryBuilder().criteria(q).permission(aclPermission).all();
}
@Override
public Flux<NewAction> findAllActionsByNameAndPageIdsAndViewMode(
String name, List<String> pageIds, Boolean viewMode, AclPermission aclPermission, Sort sort) {
List<Criteria> criteriaList =
this.getCriteriaForFindAllActionsByNameAndPageIdsAndViewMode(name, pageIds, viewMode);
return queryBuilder()
.criteria(criteriaList)
.criteria(getCriteriaForFindAllActionsByNameAndPageIdsAndViewMode(name, pageIds, viewMode))
.permission(aclPermission)
.sort(sort)
.all();
}
protected List<Criteria> getCriteriaForFindAllActionsByNameAndPageIdsAndViewMode(
protected BridgeQuery<NewAction> getCriteriaForFindAllActionsByNameAndPageIdsAndViewMode(
String name, List<String> 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<Criteria> criteriaList = new ArrayList<>();
final BridgeQuery<NewAction> 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<NewAction> findUnpublishedActionsByNameInAndPageIdAndExecuteOnLoadTrue(
Set<String> names, String pageId, AclPermission permission) {
List<Criteria> 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<NewAction> findUnpublishedActionsByNameInAndPageId(
Set<String> names, String pageId, AclPermission permission) {
List<Criteria> criteriaList = new ArrayList<>();
BridgeQuery<NewAction> 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<NewAction> findUnpublishedActionsByPageIdAndExecuteOnLoadSetByUserTrue(
String pageId, AclPermission permission) {
List<Criteria> criteriaList = new ArrayList<>();
BridgeQuery<NewAction> q = Bridge.<NewAction>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<NewAction> 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<NewAction> getCriterionForFindByApplicationId(String applicationId) {
return Bridge.equal(NewAction.Fields.applicationId, applicationId);
}
@Override
public Flux<NewAction> findByApplicationIdAndViewMode(
String applicationId, Boolean viewMode, AclPermission aclPermission) {
List<Criteria> criteria = this.getCriteriaForFindByApplicationIdAndViewMode(applicationId, viewMode);
return queryBuilder().criteria(criteria).permission(aclPermission).all();
return queryBuilder()
.criteria(getCriteriaForFindByApplicationIdAndViewMode(applicationId, viewMode))
.permission(aclPermission)
.all();
}
protected List<Criteria> getCriteriaForFindByApplicationIdAndViewMode(String applicationId, Boolean viewMode) {
List<Criteria> criteria = new ArrayList<>();
Criteria applicationCriterion = this.getCriterionForFindByApplicationId(applicationId);
criteria.add(applicationCriterion);
protected BridgeQuery<NewAction> getCriteriaForFindByApplicationIdAndViewMode(
String applicationId, Boolean viewMode) {
final BridgeQuery<NewAction> 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<Long> 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<NewAction> 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<NewAction> 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<NewAction> findByGitSyncIdAndDefaultApplicationId(
String defaultApplicationId, String gitSyncId, AclPermission permission) {
return findByGitSyncIdAndDefaultApplicationId(defaultApplicationId, gitSyncId, Optional.ofNullable(permission));
}
@Override
public Mono<NewAction> 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();
final BridgeQuery<NewAction> q = Bridge.<NewAction>equal(
defaultResources + "." + FieldName.ACTION_ID, defaultActionId)
.equal(defaultResources + "." + FieldName.BRANCH_NAME, branchName);
return queryBuilder().criteria(q).permission(permission).one();
}
@Override
public Flux<NewAction> findByPageIds(List<String> 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<NewAction> findByPageIds(List<String> pageIds, Optional<AclPermission> 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<NewAction> findNonJsActionsByApplicationIdAndViewMode(
String applicationId, Boolean viewMode, AclPermission aclPermission) {
List<Criteria> criteria =
this.getCriteriaForFindNonJsActionsByApplicationIdAndViewMode(applicationId, viewMode);
return queryBuilder().criteria(criteria).permission(aclPermission).all();
return queryBuilder()
.criteria(getCriteriaForFindNonJsActionsByApplicationIdAndViewMode(applicationId, viewMode))
.permission(aclPermission)
.all();
}
protected List<Criteria> getCriteriaForFindNonJsActionsByApplicationIdAndViewMode(
protected BridgeQuery<NewAction> getCriteriaForFindNonJsActionsByApplicationIdAndViewMode(
String applicationId, Boolean viewMode) {
List<Criteria> 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<NewAction> 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<NewAction> findAllNonJsActionsByNameAndPageIdsAndViewMode(
String name, List<String> pageIds, Boolean viewMode, AclPermission aclPermission, Sort sort) {
List<Criteria> criteriaList =
this.getCriteriaForFindAllNonJsActionsByNameAndPageIdsAndViewMode(name, pageIds, viewMode);
return queryBuilder()
.criteria(criteriaList)
.criteria(getCriteriaForFindAllNonJsActionsByNameAndPageIdsAndViewMode(name, pageIds, viewMode))
.permission(aclPermission)
.sort(sort)
.all();
}
protected List<Criteria> getCriteriaForFindAllNonJsActionsByNameAndPageIdsAndViewMode(
protected BridgeQuery<NewAction> getCriteriaForFindAllNonJsActionsByNameAndPageIdsAndViewMode(
String name, List<String> pageIds, Boolean viewMode) {
List<Criteria> criteriaList = new ArrayList<>();
Criteria nonJsTypeCriteria = where(NewAction.Fields.pluginType).ne(PluginType.JS);
criteriaList.add(nonJsTypeCriteria);
final BridgeQuery<NewAction> 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<NewAction> findByDefaultApplicationId(String defaultApplicationId, Optional<AclPermission> 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<Void> publishActions(String applicationId, AclPermission permission) {
Criteria applicationIdCriteria = this.getCriterionForFindByApplicationId(applicationId);
return copyUnpublishedActionToPublishedAction(applicationIdCriteria, permission);
return copyUnpublishedActionToPublishedAction(getCriterionForFindByApplicationId(applicationId), permission);
}
protected Mono<Void> copyUnpublishedActionToPublishedAction(Criteria criteria, AclPermission permission) {
protected Mono<Void> copyUnpublishedActionToPublishedAction(
BridgeQuery<NewAction> criteria, AclPermission permission) {
Mono<Set<String>> permissionGroupsMono =
getCurrentUserPermissionGroupsIfRequired(Optional.ofNullable(permission));
@ -537,18 +372,13 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl<
@Override
public Mono<Integer> archiveDeletedUnpublishedActions(String applicationId, AclPermission permission) {
Criteria applicationIdCriteria = this.getCriterionForFindByApplicationId(applicationId);
String unpublishedDeletedAtFieldName = NewAction.Fields.unpublishedAction_deletedAt;
Criteria deletedFromUnpublishedCriteria =
where(unpublishedDeletedAtFieldName).ne(null);
final BridgeQuery<NewAction> 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<NewAction> findAllByApplicationIdsWithoutPermission(
List<String> applicationIds, List<String> 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<NewAction> findAllUnpublishedActionsByContextIdAndContextType(
String contextId, CreatorContextType contextType, AclPermission permission, boolean includeJs) {
List<Criteria> 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<NewAction> q = Bridge.<NewAction>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<NewAction> findAllPublishedActionsByContextIdAndContextType(
String contextId, CreatorContextType contextType, AclPermission permission, boolean includeJs) {
List<Criteria> 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<NewAction> q =
Bridge.<NewAction>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();
}
}

View File

@ -1127,7 +1127,7 @@ public class LayoutActionServiceTest {
newActionArray[0] = newAction1;
newActionArray[1] = newAction2;
Flux<NewAction> newActionFlux = Flux.fromArray(newActionArray);
Mockito.when(newActionService.findUnpublishedOnLoadActionsExplicitSetByUserInPage(Mockito.any()))
Mockito.when(newActionService.findUnpublishedOnLoadActionsExplicitSetByUserInPage(Mockito.anyString()))
.thenReturn(newActionFlux);
Mono<LayoutDTO> updateLayoutMono =
@ -1199,7 +1199,7 @@ public class LayoutActionServiceTest {
NewAction[] newActionArray = new NewAction[1];
newActionArray[0] = newAction1;
Flux<NewAction> newActionFlux = Flux.fromArray(newActionArray);
Mockito.when(newActionService.findUnpublishedOnLoadActionsExplicitSetByUserInPage(Mockito.any()))
Mockito.when(newActionService.findUnpublishedOnLoadActionsExplicitSetByUserInPage(Mockito.anyString()))
.thenReturn(newActionFlux);
Mono<LayoutDTO> updateLayoutMono =