Skip to content

Commit

Permalink
added suggested changes
Browse files Browse the repository at this point in the history
  • Loading branch information
sondermanish committed May 23, 2024
1 parent 8e58e95 commit e1adbc5
Show file tree
Hide file tree
Showing 19 changed files with 490 additions and 143 deletions.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.appsmith.server.helpers.ce.autocommit;

import com.appsmith.server.constants.ArtifactType;
import com.appsmith.server.domains.GitArtifactMetadata;
import com.appsmith.server.domains.Layout;
import com.appsmith.server.dtos.PageDTO;
import com.appsmith.server.helpers.DSLMigrationUtils;
import com.appsmith.server.helpers.GitUtils;
import com.appsmith.server.migrations.JsonSchemaVersions;
import com.appsmith.server.services.CommonGitService;
import lombok.extern.slf4j.Slf4j;
import net.minidev.json.JSONObject;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;

@Slf4j
@Component
public class AutoCommitEligibilityHelperImpl implements AutoCommitEligibiltyHelper {

private final CommonGitService commonGitService;
private final DSLMigrationUtils dslMigrationUtils;

public AutoCommitEligibilityHelperImpl(
@Lazy CommonGitService commonGitService, DSLMigrationUtils dslMigrationUtils) {
this.commonGitService = commonGitService;
this.dslMigrationUtils = dslMigrationUtils;
}

@Override
public Mono<Boolean> isServerAutoCommitRequired(String workspaceId, GitArtifactMetadata gitMetadata) {

String defaultApplicationId = gitMetadata.getDefaultArtifactId();
String branchName = gitMetadata.getBranchName();
String repoName = gitMetadata.getRepoName();

return commonGitService
.getMetadataServerSchemaMigrationVersion(
workspaceId, defaultApplicationId, branchName, repoName, ArtifactType.APPLICATION)
.map(serverSchemaVersion -> {
if (JsonSchemaVersions.serverVersion > serverSchemaVersion) {
return TRUE;
}

return FALSE;
})
.onErrorResume(error -> {
log.debug(
"error while retrieving the metadata for defaultApplicationId : {}, branchName : {}",
defaultApplicationId,
branchName);
return Mono.just(FALSE);
});
}

@Override
public Mono<Boolean> isClientMigrationRequired(PageDTO pageDTO) {
return dslMigrationUtils
.getLatestDslVersion()
.map(latestDslVersion -> {
// ensuring that the page has only one layout, as we don't support multiple layouts yet
// when multiple layouts are supported, this code will have to be updated
assert pageDTO.getLayouts().size() == 1;
Layout layout = pageDTO.getLayouts().get(0);
JSONObject layoutDsl = layout.getDsl();
return GitUtils.isMigrationRequired(layoutDsl, latestDslVersion);
})
.onErrorResume(error -> {
log.debug("Error fetching latest DSL version");
return Mono.just(Boolean.FALSE);
});
}

@Override
public Mono<AutoCommitTriggerDTO> isAutoCommitRequired(
String workspaceId, GitArtifactMetadata gitArtifactMetadata, PageDTO pageDTO) {
String defaultApplicationId = gitArtifactMetadata.getDefaultArtifactId();
String branchName = gitArtifactMetadata.getBranchName();

Mono<Boolean> isClientAutocommitRequiredMono =
isClientMigrationRequired(pageDTO).defaultIfEmpty(FALSE);

Mono<Boolean> isServerAutocommitRequiredMono = isServerAutoCommitRequired(workspaceId, gitArtifactMetadata)
.defaultIfEmpty(FALSE)
.onErrorResume(error -> {
log.debug(
"Error in checking server migration for application id : {} branch name : {}",
defaultApplicationId,
branchName);
return Mono.just(Boolean.FALSE);
});

return isServerAutocommitRequiredMono
.zipWith(isClientAutocommitRequiredMono)
.map(tuple2 -> {
Boolean serverFlag = tuple2.getT1();
Boolean clientFlag = tuple2.getT2();

AutoCommitTriggerDTO autoCommitTriggerDTO = new AutoCommitTriggerDTO();
autoCommitTriggerDTO.setIsClientAutoCommitRequired(TRUE.equals(clientFlag));
autoCommitTriggerDTO.setIsServerAutoCommitRequired(TRUE.equals(serverFlag));
autoCommitTriggerDTO.setIsAutoCommitRequired((TRUE.equals(serverFlag) || TRUE.equals(clientFlag)));
return autoCommitTriggerDTO;
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.appsmith.server.helpers.ce.autocommit;

import com.appsmith.server.domains.GitArtifactMetadata;
import com.appsmith.server.dtos.PageDTO;
import reactor.core.publisher.Mono;

public interface AutoCommitEligibiltyHelper {

Mono<Boolean> isServerAutoCommitRequired(String workspaceId, GitArtifactMetadata gitMetadata);

Mono<Boolean> isClientMigrationRequired(PageDTO pageDTO);

Mono<AutoCommitTriggerDTO> isAutoCommitRequired(
String workspaceId, GitArtifactMetadata gitArtifactMetadata, PageDTO pageDTO);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.appsmith.server.helpers.ce.autocommit;

import lombok.Data;

@Data
public class AutoCommitTriggerDTO {

private Boolean isAutoCommitRequired;

private Boolean isClientAutoCommitRequired;

private Boolean isServerAutoCommitRequired;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.appsmith.server.helpers.ce.autocommit;

import com.appsmith.server.dtos.AutoCommitProgressDTO;
import reactor.core.publisher.Mono;

public interface GitAutoCommitHelper {

Mono<Boolean> autoCommitApplication(String defaultApplicationId, String branchName, Boolean isClientMigration);

Mono<AutoCommitProgressDTO> getAutoCommitProgress(String applicationId);

Mono<Boolean> autoCommitClientMigration(String defaultApplicationId, String branchName);

Mono<Boolean> autoCommitServerMigration(String defaultApplicationId, String branchName);

Mono<Boolean> triggerAutoCommit(
AutoCommitTriggerDTO autoCommitTriggerDTO, String defaultApplicationId, String branchName);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.appsmith.server.helpers.ce.autocommit;

import com.appsmith.server.dtos.AutoCommitProgressDTO;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

@Component
public class GitAutoCommitHelperFallbackImpl implements GitAutoCommitHelper {

@Override
public Mono<Boolean> autoCommitClientMigration(String defaultApplicationId, String branchName) {
return Mono.just(Boolean.FALSE);
}

@Override
public Mono<Boolean> autoCommitServerMigration(String defaultApplicationId, String branchName) {
return Mono.just(Boolean.FALSE);
}

@Override
public Mono<Boolean> autoCommitApplication(
String defaultApplicationId, String branchName, Boolean isClientMigration) {
return Mono.just(Boolean.FALSE);
}

@Override
public Mono<AutoCommitProgressDTO> getAutoCommitProgress(String applicationId) {
return Mono.empty();
}

@Override
public Mono<Boolean> triggerAutoCommit(
AutoCommitTriggerDTO autoCommitTriggerDTO, String defaultApplicationId, String branchName) {
return Mono.just(Boolean.FALSE);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package com.appsmith.server.helpers.ce;
package com.appsmith.server.helpers.ce.autocommit;

import com.appsmith.external.annotations.FeatureFlagged;
import com.appsmith.external.enums.FeatureFlagEnum;
import com.appsmith.server.applications.base.ApplicationService;
import com.appsmith.server.constants.ArtifactType;
import com.appsmith.server.domains.Application;
import com.appsmith.server.domains.GitArtifactMetadata;
import com.appsmith.server.domains.GitProfile;
Expand All @@ -12,28 +11,24 @@
import com.appsmith.server.helpers.GitPrivateRepoHelper;
import com.appsmith.server.helpers.GitUtils;
import com.appsmith.server.helpers.RedisUtils;
import com.appsmith.server.migrations.JsonSchemaVersions;
import com.appsmith.server.services.CommonGitService;
import com.appsmith.server.services.FeatureFlagService;
import com.appsmith.server.services.UserDataService;
import com.appsmith.server.solutions.ApplicationPermission;
import com.appsmith.server.solutions.AutoCommitEventHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import reactor.core.publisher.Mono;

import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;

@Slf4j
@Primary
@Service
public class GitAutoCommitHelperImpl extends GitAutoCommitHelperCECompatibleImpl implements GitAutoCommitHelper {
public class GitAutoCommitHelperImpl extends GitAutoCommitHelperFallbackImpl implements GitAutoCommitHelper {
private final GitPrivateRepoHelper gitPrivateRepoHelper;
private final AutoCommitEventHandler autoCommitEventHandler;
private final UserDataService userDataService;
private final FeatureFlagService featureFlagService;
private final ApplicationService applicationService;
private final ApplicationPermission applicationPermission;
private final RedisUtils redisUtils;
Expand All @@ -43,15 +38,13 @@ public GitAutoCommitHelperImpl(
GitPrivateRepoHelper gitPrivateRepoHelper,
AutoCommitEventHandler autoCommitEventHandler,
UserDataService userDataService,
FeatureFlagService featureFlagService,
ApplicationService applicationService,
ApplicationPermission applicationPermission,
RedisUtils redisUtils,
@Lazy CommonGitService commonGitService) {
this.gitPrivateRepoHelper = gitPrivateRepoHelper;
this.autoCommitEventHandler = autoCommitEventHandler;
this.userDataService = userDataService;
this.featureFlagService = featureFlagService;
this.applicationService = applicationService;
this.applicationPermission = applicationPermission;
this.redisUtils = redisUtils;
Expand Down Expand Up @@ -210,29 +203,20 @@ public Mono<Boolean> autoCommitApplication(
});
}

@Override
public Mono<Boolean> isServerAutoCommitRequired(String workspaceId, GitArtifactMetadata gitMetadata) {

String defaultApplicationId = gitMetadata.getDefaultArtifactId();
String branchName = gitMetadata.getBranchName();
String repoName = gitMetadata.getRepoName();

return commonGitService
.getMetadataServerSchemaMigrationVersion(
workspaceId, defaultApplicationId, branchName, repoName, ArtifactType.APPLICATION)
.map(serverSchemaVersion -> {
if (JsonSchemaVersions.serverVersion > serverSchemaVersion) {
return TRUE;
}
public Mono<Boolean> triggerAutoCommit(
AutoCommitTriggerDTO autoCommitTriggerDTO, String defaultApplicationId, String branchName) {

return FALSE;
})
.onErrorResume(error -> {
log.debug(
"error while retrieving the metadata for defaultApplicationId : {}, branchName : {}",
defaultApplicationId,
branchName);
return Mono.just(FALSE);
});
if (!Boolean.TRUE.equals(autoCommitTriggerDTO.getIsAutoCommitRequired())) {
return Mono.just(Boolean.FALSE);
}

// Since server autocommit is a subset of the client migration, hence if only the client migration
// is true then we can only go ahead with client migration.
if (Boolean.TRUE.equals(autoCommitTriggerDTO.getIsClientAutoCommitRequired())) {
return autoCommitClientMigration(defaultApplicationId, branchName);
}

// at this point only server flag could be true.
return autoCommitServerMigration(defaultApplicationId, branchName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
import com.appsmith.server.helpers.DSLMigrationUtils;
import com.appsmith.server.helpers.GitFileUtils;
import com.appsmith.server.helpers.ResponseUtils;
import com.appsmith.server.helpers.ce.GitAutoCommitHelper;
import com.appsmith.server.helpers.ce.autocommit.AutoCommitEligibiltyHelper;
import com.appsmith.server.helpers.ce.autocommit.GitAutoCommitHelper;
import com.appsmith.server.layouts.UpdateLayoutService;
import com.appsmith.server.newactions.base.NewActionService;
import com.appsmith.server.newpages.base.NewPageService;
Expand Down Expand Up @@ -63,6 +64,7 @@ public ApplicationPageServiceImpl(
DatasourcePermission datasourcePermission,
DSLMigrationUtils dslMigrationUtils,
GitAutoCommitHelper gitAutoCommitHelper,
AutoCommitEligibiltyHelper autoCommitEligibiltyHelper,
ClonePageService<NewAction> actionClonePageService,
ClonePageService<ActionCollection> actionCollectionClonePageService) {
super(
Expand Down Expand Up @@ -94,6 +96,7 @@ public ApplicationPageServiceImpl(
datasourcePermission,
dslMigrationUtils,
gitAutoCommitHelper,
autoCommitEligibiltyHelper,
actionClonePageService,
actionCollectionClonePageService);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import com.appsmith.server.helpers.CommonGitFileUtils;
import com.appsmith.server.helpers.GitPrivateRepoHelper;
import com.appsmith.server.helpers.RedisUtils;
import com.appsmith.server.helpers.ce.GitAutoCommitHelper;
import com.appsmith.server.helpers.ce.autocommit.GitAutoCommitHelper;
import com.appsmith.server.imports.internal.ImportService;
import com.appsmith.server.repositories.GitDeployKeysRepository;
import com.appsmith.server.services.ce_compatible.CommonGitServiceCECompatibleImpl;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import com.appsmith.server.helpers.GitPrivateRepoHelper;
import com.appsmith.server.helpers.RedisUtils;
import com.appsmith.server.helpers.ResponseUtils;
import com.appsmith.server.helpers.ce.GitAutoCommitHelper;
import com.appsmith.server.helpers.ce.autocommit.GitAutoCommitHelper;
import com.appsmith.server.imports.internal.ImportService;
import com.appsmith.server.newactions.base.NewActionService;
import com.appsmith.server.newpages.base.NewPageService;
Expand Down
Loading

0 comments on commit e1adbc5

Please sign in to comment.