diff --git a/app/server/.mvn/jvm.config b/app/server/.mvn/jvm.config
deleted file mode 100644
index 058004f868..0000000000
--- a/app/server/.mvn/jvm.config
+++ /dev/null
@@ -1,11 +0,0 @@
--Dcomment='http://errorprone.info/docs/installation'
---add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
---add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
---add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
diff --git a/app/server/appsmith-interfaces/pom.xml b/app/server/appsmith-interfaces/pom.xml
index 485fdaacd0..418de9925e 100644
--- a/app/server/appsmith-interfaces/pom.xml
+++ b/app/server/appsmith-interfaces/pom.xml
@@ -99,6 +99,19 @@
com.google.code.gson
gson
+
+ com.querydsl
+ querydsl-mongodb
+
+
+ com.querydsl
+ querydsl-apt
+ provided
+
+
+ com.querydsl
+ querydsl-jpa
+
org.apache.commons
commons-text
@@ -235,4 +248,25 @@
+
+
+
+ com.mysema.maven
+ apt-maven-plugin
+ 1.1.3
+
+
+
+ process
+
+
+ target/generated-sources/java
+ org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor
+
+
+
+
+
+
+
diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/ActionDTO.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/ActionDTO.java
index e2bc67e2dd..df2b86f4f4 100644
--- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/ActionDTO.java
+++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/ActionDTO.java
@@ -1,6 +1,7 @@
package com.appsmith.external.models;
import com.appsmith.external.models.ce.ActionCE_DTO;
+import com.querydsl.core.annotations.QueryEmbeddable;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@@ -11,6 +12,7 @@ import lombok.experimental.FieldNameConstants;
@Setter
@NoArgsConstructor
@ToString(callSuper = true)
+@QueryEmbeddable
@FieldNameConstants
public class ActionDTO extends ActionCE_DTO {
public static class Fields extends ActionCE_DTO.Fields {}
diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/BaseDomain.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/BaseDomain.java
index 3d6bf102f5..eb6e717603 100644
--- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/BaseDomain.java
+++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/BaseDomain.java
@@ -4,6 +4,7 @@ import com.appsmith.external.helpers.Identifiable;
import com.appsmith.external.views.Views;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
+import com.querydsl.core.annotations.QueryTransient;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
@@ -65,6 +66,7 @@ public abstract class BaseDomain implements Persistable, AppsmithDomain,
*/
@Deprecated(forRemoval = true)
@JsonView(Views.Internal.class)
+ @QueryTransient
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
protected Boolean deleted = false;
@@ -81,6 +83,7 @@ public abstract class BaseDomain implements Persistable, AppsmithDomain,
return this.getId() == null;
}
+ @QueryTransient
@JsonView(Views.Internal.class)
public boolean isDeleted() {
return deletedAt != null;
diff --git a/app/server/appsmith-server/pom.xml b/app/server/appsmith-server/pom.xml
index 363b039222..620b7b587f 100644
--- a/app/server/appsmith-server/pom.xml
+++ b/app/server/appsmith-server/pom.xml
@@ -304,6 +304,18 @@
1.0-SNAPSHOT
+
+ com.querydsl
+ querydsl-mongodb
+
+
+ com.querydsl
+ querydsl-apt
+
+
+ com.querydsl
+ querydsl-jpa
+
org.modelmapper
modelmapper
@@ -457,6 +469,26 @@
org.springframework.boot
spring-boot-maven-plugin
+
+
+ com.mysema.maven
+ apt-maven-plugin
+ 1.1.3
+
+
+
+ process
+
+
+ target/generated-sources/java
+ org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor
+
+ true
+
+
+
+
+
diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Application.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Application.java
index a6c2372de2..95036505f4 100644
--- a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Application.java
+++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Application.java
@@ -6,6 +6,7 @@ import com.appsmith.server.constants.ArtifactType;
import com.appsmith.server.dtos.CustomJSLibContextDTO;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
+import com.querydsl.core.annotations.QueryEntity;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -34,6 +35,7 @@ import static com.appsmith.server.helpers.StringUtils.dotted;
@Setter
@ToString
@NoArgsConstructor
+@QueryEntity
@Document
@FieldNameConstants
public class Application extends BaseDomain implements Artifact {
diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ActionCollectionDTO.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ActionCollectionDTO.java
index a08bd585e2..519477f5ba 100644
--- a/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ActionCollectionDTO.java
+++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ActionCollectionDTO.java
@@ -1,6 +1,7 @@
package com.appsmith.server.dtos;
import com.appsmith.server.dtos.ce.ActionCollectionCE_DTO;
+import com.querydsl.core.annotations.QueryEmbeddable;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@@ -11,6 +12,7 @@ import lombok.experimental.FieldNameConstants;
@Setter
@NoArgsConstructor
@ToString(callSuper = true)
+@QueryEmbeddable
@FieldNameConstants
public class ActionCollectionDTO extends ActionCollectionCE_DTO {
public static class Fields extends ActionCollectionCE_DTO.Fields {}
diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/MigrationHelperMethods.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/MigrationHelperMethods.java
index a43ee3cdb5..0097de5c8f 100644
--- a/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/MigrationHelperMethods.java
+++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/migrations/MigrationHelperMethods.java
@@ -13,6 +13,7 @@ import com.appsmith.server.domains.User;
import com.appsmith.server.dtos.ApplicationJson;
import com.appsmith.server.helpers.CollectionUtils;
import com.appsmith.server.repositories.CacheableRepositoryHelper;
+import com.querydsl.core.types.Path;
import org.apache.commons.lang.StringUtils;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
@@ -28,6 +29,7 @@ import java.util.stream.Collectors;
import static com.appsmith.server.constants.ResourceModes.EDIT;
import static com.appsmith.server.constants.ResourceModes.VIEW;
+import static com.appsmith.server.repositories.BaseAppsmithRepositoryImpl.fieldName;
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;
@@ -210,6 +212,19 @@ public class MigrationHelperMethods {
return query((new Criteria()).andOperator(pluginIdMatchesSuppliedPluginId, isNotDeleted));
}
+ /**
+ * Here 'id' refers to the ObjectId which is used to uniquely identify each Mongo document. 'path' refers to the
+ * path in the Query DSL object that indicates which field in a document should be matched against the `id`.
+ * `type` is a POJO class type that indicates which collection we are interested in. eg. path=QNewAction
+ * .newAction.id, type=NewAction.class
+ */
+ public static T fetchDomainObjectUsingId(
+ String id, MongoTemplate mongoTemplate, Path path, Class type) {
+ final T domainObject =
+ mongoTemplate.findOne(query(where(fieldName(path)).is(id)), type);
+ return domainObject;
+ }
+
/**
* Here 'id' refers to the ObjectId which is used to uniquely identify each Mongo document. 'path' refers to the
* path in the Query DSL object that indicates which field in a document should be matched against the `id`.
diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/BaseAppsmithRepositoryCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/BaseAppsmithRepositoryCEImpl.java
index f30cce7cf1..86360a1b1d 100644
--- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/BaseAppsmithRepositoryCEImpl.java
+++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/BaseAppsmithRepositoryCEImpl.java
@@ -13,6 +13,8 @@ import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.model.WriteModel;
+import com.querydsl.core.types.Path;
+import jakarta.validation.constraints.NotNull;
import lombok.NonNull;
import org.bson.Document;
import org.bson.types.ObjectId;
@@ -90,6 +92,21 @@ public abstract class BaseAppsmithRepositoryCEImpl {
(Class) GenericTypeResolver.resolveTypeArgument(getClass(), BaseAppsmithRepositoryCEImpl.class);
}
+ public static String fieldName(Path> path) {
+ return Optional.ofNullable(path).map(p -> p.getMetadata().getName()).orElse("");
+ }
+
+ public static String completeFieldName(@NotNull Path> path) {
+ StringBuilder sb = new StringBuilder();
+
+ while (!path.getMetadata().isRoot()) {
+ sb.insert(0, "." + fieldName(path));
+ path = path.getMetadata().getParent();
+ }
+ sb.deleteCharAt(0);
+ return sb.toString();
+ }
+
public static Criteria notDeleted() {
return new Criteria()
.andOperator(
diff --git a/app/server/pom.xml b/app/server/pom.xml
index 23a4d31a66..f497c8a628 100644
--- a/app/server/pom.xml
+++ b/app/server/pom.xml
@@ -27,7 +27,6 @@
true
- 2.26.1
17
true
1.4.14
@@ -75,34 +74,6 @@
maven-dependency-plugin
3.4.0
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- true
-
- -XDcompilePolicy=simple
-
-
- -Xplugin:ErrorProne \
- -XepDisableAllChecks
-
-
-
-
- org.projectlombok
- lombok
- ${lombok.version}
-
-
- com.google.errorprone
- error_prone_core
- ${error-prone.version}
-
-
-
-
org.apache.maven.plugins
maven-surefire-plugin