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