chore: Split related to import for mi (#29855)
This commit is contained in:
parent
e621376305
commit
39160b4486
|
|
@ -62,6 +62,8 @@ public interface ActionCollectionServiceCE extends CrudService<ActionCollection,
|
|||
|
||||
Flux<ActionCollection> findByPageIds(List<String> pageIds, Optional<AclPermission> permission);
|
||||
|
||||
Flux<ActionCollection> findByPageIdsForExport(List<String> pageIds, Optional<AclPermission> permission);
|
||||
|
||||
Mono<ActionCollection> findByBranchNameAndDefaultCollectionId(
|
||||
String branchName, String defaultCollectionId, AclPermission permission);
|
||||
|
||||
|
|
|
|||
|
|
@ -366,7 +366,8 @@ public class ActionCollectionServiceCEImpl extends BaseService<ActionCollectionR
|
|||
.flatMap(toDelete -> {
|
||||
Mono<ActionCollection> modifiedActionCollectionMono;
|
||||
|
||||
if (toDelete.getPublishedCollection() != null) {
|
||||
if (toDelete.getPublishedCollection() != null
|
||||
&& toDelete.getPublishedCollection().getName() != null) {
|
||||
toDelete.getUnpublishedCollection().setDeletedAt(Instant.now());
|
||||
modifiedActionCollectionMono = Flux.fromIterable(toDelete.getUnpublishedCollection()
|
||||
.getDefaultToBranchedActionIdsMap()
|
||||
|
|
@ -488,6 +489,11 @@ public class ActionCollectionServiceCEImpl extends BaseService<ActionCollectionR
|
|||
return repository.findByPageIds(pageIds, permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<ActionCollection> findByPageIdsForExport(List<String> pageIds, Optional<AclPermission> permission) {
|
||||
return repository.findByPageIds(pageIds, permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<ActionCollection> archiveById(String id) {
|
||||
Mono<ActionCollection> actionCollectionMono = repository
|
||||
|
|
|
|||
|
|
@ -48,8 +48,8 @@ public class ActionCollectionExportableServiceCEImpl implements ExportableServic
|
|||
|
||||
Optional<AclPermission> optionalPermission = Optional.ofNullable(actionPermission.getExportPermission(
|
||||
exportingMetaDTO.getIsGitSync(), exportingMetaDTO.getExportWithConfiguration()));
|
||||
Flux<ActionCollection> actionCollectionFlux =
|
||||
actionCollectionService.findByPageIds(exportingMetaDTO.getUnpublishedPages(), optionalPermission);
|
||||
Flux<ActionCollection> actionCollectionFlux = actionCollectionService.findByPageIdsForExport(
|
||||
exportingMetaDTO.getUnpublishedPages(), optionalPermission);
|
||||
return actionCollectionFlux
|
||||
.collectList()
|
||||
.map(actionCollectionList -> {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import com.appsmith.server.exceptions.AppsmithException;
|
|||
import com.appsmith.server.helpers.DefaultResourcesUtils;
|
||||
import com.appsmith.server.imports.importable.ImportableServiceCE;
|
||||
import com.appsmith.server.repositories.ActionCollectionRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
|
@ -34,16 +35,11 @@ import java.util.Set;
|
|||
import static com.appsmith.external.helpers.AppsmithBeanUtils.copyNestedNonNullProperties;
|
||||
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class ActionCollectionImportableServiceCEImpl implements ImportableServiceCE<ActionCollection> {
|
||||
private final ActionCollectionService actionCollectionService;
|
||||
private final ActionCollectionRepository repository;
|
||||
|
||||
public ActionCollectionImportableServiceCEImpl(
|
||||
ActionCollectionService actionCollectionService, ActionCollectionRepository repository) {
|
||||
this.actionCollectionService = actionCollectionService;
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
// Requires pageNameMap, pageNameToOldNameMap, pluginMap and actionResultDTO to be present in importable resources.
|
||||
// Updates actionCollectionResultDTO in importable resources.
|
||||
// Also directly updates required information in DB
|
||||
|
|
@ -230,6 +226,10 @@ public class ActionCollectionImportableServiceCEImpl implements ImportableServic
|
|||
|
||||
Set<Policy> existingPolicy = existingActionCollection.getPolicies();
|
||||
copyNestedNonNullProperties(actionCollection, existingActionCollection);
|
||||
|
||||
populateDomainMappedReferences(
|
||||
mappedImportableResourcesDTO, existingActionCollection);
|
||||
|
||||
// Update branchName
|
||||
existingActionCollection
|
||||
.getDefaultResources()
|
||||
|
|
@ -296,6 +296,8 @@ public class ActionCollectionImportableServiceCEImpl implements ImportableServic
|
|||
actionCollection.getApplicationId() + "_" + new ObjectId());
|
||||
}
|
||||
|
||||
populateDomainMappedReferences(mappedImportableResourcesDTO, actionCollection);
|
||||
|
||||
// it's new actionCollection
|
||||
newActionCollections.add(actionCollection);
|
||||
resultDTO.getSavedActionCollectionIds().add(actionCollection.getId());
|
||||
|
|
@ -318,6 +320,11 @@ public class ActionCollectionImportableServiceCEImpl implements ImportableServic
|
|||
});
|
||||
}
|
||||
|
||||
protected void populateDomainMappedReferences(
|
||||
MappedImportableResourcesDTO mappedImportableResourcesDTO, ActionCollection actionCollection) {
|
||||
// Nothing needs to be copied into the action collection from mapped resources
|
||||
}
|
||||
|
||||
private NewPage updatePageInActionCollection(ActionCollectionDTO collectionDTO, Map<String, NewPage> pageNameMap) {
|
||||
NewPage parentPage = pageNameMap.get(collectionDTO.getPageId());
|
||||
if (parentPage == null) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ import lombok.Builder;
|
|||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
|
|
@ -16,4 +18,5 @@ public class ImportingMetaDTO {
|
|||
String branchName;
|
||||
Boolean appendToApp;
|
||||
ImportApplicationPermissionProvider permissionProvider;
|
||||
Set<String> currentUserPermissionGroups;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ public class ExportApplicationServiceCEImpl implements ExportApplicationServiceC
|
|||
private final ExportableService<Plugin> pluginExportableService;
|
||||
private final ExportableService<NewPage> newPageExportableService;
|
||||
protected final ExportableService<NewAction> newActionExportableService;
|
||||
private final ExportableService<ActionCollection> actionCollectionExportableService;
|
||||
protected final ExportableService<ActionCollection> actionCollectionExportableService;
|
||||
private final ExportableService<Theme> themeExportableService;
|
||||
private final ExportableService<CustomJSLib> customJSLibExportableService;
|
||||
|
||||
|
|
@ -193,9 +193,6 @@ public class ExportApplicationServiceCEImpl implements ExportApplicationServiceC
|
|||
|
||||
newPageExportableService.sanitizeEntities(exportingMetaDTO, mappedResourcesDTO, applicationJson, serialiseFor);
|
||||
|
||||
newActionExportableService.sanitizeEntities(
|
||||
exportingMetaDTO, mappedResourcesDTO, applicationJson, serialiseFor);
|
||||
|
||||
return Mono.empty().then();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -499,8 +499,7 @@ public class GitFileUtils {
|
|||
|
||||
private void removeUnwantedFieldFromAction(NewAction action) {
|
||||
// As we are publishing the app and then committing to git we expect the published and unpublished ActionDTO
|
||||
// will
|
||||
// be same, so we only commit unpublished ActionDTO.
|
||||
// will be same, so we only commit unpublished ActionDTO.
|
||||
action.setPublishedAction(null);
|
||||
removeUnwantedFieldsFromBaseDomain(action);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import com.appsmith.server.newactions.base.NewActionService;
|
|||
import com.appsmith.server.repositories.PermissionGroupRepository;
|
||||
import com.appsmith.server.services.AnalyticsService;
|
||||
import com.appsmith.server.services.ApplicationPageService;
|
||||
import com.appsmith.server.services.PermissionGroupService;
|
||||
import com.appsmith.server.services.SessionUserService;
|
||||
import com.appsmith.server.services.WorkspaceService;
|
||||
import com.appsmith.server.solutions.ActionPermission;
|
||||
|
|
@ -93,6 +94,7 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
private final ImportableService<Datasource> datasourceImportableService;
|
||||
private final ImportableService<NewAction> newActionImportableService;
|
||||
private final ImportableService<ActionCollection> actionCollectionImportableService;
|
||||
private final PermissionGroupService permissionGroupService;
|
||||
|
||||
@Override
|
||||
public Mono<ApplicationImportDTO> extractFileAndSaveApplication(String workspaceId, Part filePart) {
|
||||
|
|
@ -205,8 +207,13 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
return Mono.error(new AppsmithException(
|
||||
AppsmithError.UNSUPPORTED_IMPORT_OPERATION_FOR_GIT_CONNECTED_APPLICATION));
|
||||
} else {
|
||||
Mono<Set<String>> permissionGroupIdsMono = permissionGroupService.getSessionUserPermissionGroupIds();
|
||||
return getPermissionProviderForUpdateNonGitConnectedAppFromJson()
|
||||
.flatMap(permissionProvider -> {
|
||||
.zipWith(permissionGroupIdsMono)
|
||||
.flatMap(tuple2 -> {
|
||||
ImportApplicationPermissionProvider permissionProvider = tuple2.getT1();
|
||||
Set<String> permissionGroups = tuple2.getT2();
|
||||
|
||||
if (!StringUtils.isEmpty(applicationId)
|
||||
&& applicationJson.getExportedApplication() != null) {
|
||||
// Remove the application name from JSON file as updating the application name is not
|
||||
|
|
@ -223,7 +230,8 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
applicationId,
|
||||
null,
|
||||
false,
|
||||
permissionProvider)
|
||||
permissionProvider,
|
||||
permissionGroups)
|
||||
.onErrorResume(error -> {
|
||||
if (error instanceof AppsmithException) {
|
||||
return Mono.error(error);
|
||||
|
|
@ -268,7 +276,8 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
.currentUserPermissionGroups(userPermissionGroups)
|
||||
.build();
|
||||
|
||||
return importApplicationInWorkspace(workspaceId, importedDoc, null, null, false, permissionProvider);
|
||||
return importApplicationInWorkspace(
|
||||
workspaceId, importedDoc, null, null, false, permissionProvider, userPermissionGroups);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -303,7 +312,13 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
.currentUserPermissionGroups(userPermissionGroups)
|
||||
.build();
|
||||
return importApplicationInWorkspace(
|
||||
workspaceId, importedDoc, applicationId, branchName, false, permissionProvider);
|
||||
workspaceId,
|
||||
importedDoc,
|
||||
applicationId,
|
||||
branchName,
|
||||
false,
|
||||
permissionProvider,
|
||||
userPermissionGroups);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -326,7 +341,13 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
.currentUserPermissionGroups(userPermissionGroups)
|
||||
.build();
|
||||
return importApplicationInWorkspace(
|
||||
workspaceId, importedDoc, applicationId, branchName, false, permissionProvider);
|
||||
workspaceId,
|
||||
importedDoc,
|
||||
applicationId,
|
||||
branchName,
|
||||
false,
|
||||
permissionProvider,
|
||||
userPermissionGroups);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -408,11 +429,11 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
if (importingMetaDTO.getAppendToApp()) { // we don't need to do anything with the imported application
|
||||
importApplicationMono = existingApplicationMono;
|
||||
} else {
|
||||
importApplicationMono = importApplicationMono
|
||||
.zipWith(existingApplicationMono)
|
||||
importApplicationMono = Mono.zip(importApplicationMono, existingApplicationMono)
|
||||
.map(objects -> {
|
||||
Application newApplication = objects.getT1();
|
||||
Application existingApplication = objects.getT2();
|
||||
|
||||
// This method sets the published mode properties in the imported
|
||||
// application.When a user imports an application from the git repo,
|
||||
// since the git only stores the unpublished version, the current
|
||||
|
|
@ -477,7 +498,8 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
String applicationId,
|
||||
String branchName,
|
||||
boolean appendToApp,
|
||||
ImportApplicationPermissionProvider permissionProvider) {
|
||||
ImportApplicationPermissionProvider permissionProvider,
|
||||
Set<String> permissionGroups) {
|
||||
/*
|
||||
1. Migrate resource to latest schema
|
||||
2. Fetch workspace by id
|
||||
|
|
@ -504,8 +526,8 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
AppsmithError.VALIDATION_FAILURE, "Field '" + errorField + "' is missing in the JSON."));
|
||||
}
|
||||
|
||||
ImportingMetaDTO importingMetaDTO =
|
||||
new ImportingMetaDTO(workspaceId, applicationId, branchName, appendToApp, permissionProvider);
|
||||
ImportingMetaDTO importingMetaDTO = new ImportingMetaDTO(
|
||||
workspaceId, applicationId, branchName, appendToApp, permissionProvider, permissionGroups);
|
||||
|
||||
MappedImportableResourcesDTO mappedImportableResourcesDTO = new MappedImportableResourcesDTO();
|
||||
|
||||
|
|
@ -886,7 +908,13 @@ public class ImportApplicationServiceCEImpl implements ImportApplicationServiceC
|
|||
.currentUserPermissionGroups(userPermissionGroups)
|
||||
.build();
|
||||
return importApplicationInWorkspace(
|
||||
workspaceId, applicationJson, applicationId, branchName, true, permissionProvider);
|
||||
workspaceId,
|
||||
applicationJson,
|
||||
applicationId,
|
||||
branchName,
|
||||
true,
|
||||
permissionProvider,
|
||||
userPermissionGroups);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import com.appsmith.server.newactions.base.NewActionService;
|
|||
import com.appsmith.server.repositories.PermissionGroupRepository;
|
||||
import com.appsmith.server.services.AnalyticsService;
|
||||
import com.appsmith.server.services.ApplicationPageService;
|
||||
import com.appsmith.server.services.PermissionGroupService;
|
||||
import com.appsmith.server.services.SessionUserService;
|
||||
import com.appsmith.server.services.WorkspaceService;
|
||||
import com.appsmith.server.solutions.ActionPermission;
|
||||
|
|
@ -31,7 +32,6 @@ import org.springframework.transaction.reactive.TransactionalOperator;
|
|||
@Service
|
||||
@Primary
|
||||
public class ImportApplicationServiceImpl extends ImportApplicationServiceCEImpl implements ImportApplicationService {
|
||||
|
||||
public ImportApplicationServiceImpl(
|
||||
DatasourceService datasourceService,
|
||||
SessionUserService sessionUserService,
|
||||
|
|
@ -54,7 +54,8 @@ public class ImportApplicationServiceImpl extends ImportApplicationServiceCEImpl
|
|||
ImportableService<CustomJSLib> customJSLibImportableService,
|
||||
ImportableService<Datasource> datasourceImportableService,
|
||||
ImportableService<NewAction> newActionImportableService,
|
||||
ImportableService<ActionCollection> actionCollectionImportableService) {
|
||||
ImportableService<ActionCollection> actionCollectionImportableService,
|
||||
PermissionGroupService permissionGroupService) {
|
||||
super(
|
||||
datasourceService,
|
||||
sessionUserService,
|
||||
|
|
@ -77,6 +78,7 @@ public class ImportApplicationServiceImpl extends ImportApplicationServiceCEImpl
|
|||
customJSLibImportableService,
|
||||
datasourceImportableService,
|
||||
newActionImportableService,
|
||||
actionCollectionImportableService);
|
||||
actionCollectionImportableService,
|
||||
permissionGroupService);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,8 +100,8 @@ public class PartialImportServiceCEImpl implements PartialImportServiceCE {
|
|||
}))
|
||||
.cache();
|
||||
|
||||
ImportingMetaDTO importingMetaDTO =
|
||||
new ImportingMetaDTO(workspaceId, applicationId, branchName, false, permissionProvider);
|
||||
ImportingMetaDTO importingMetaDTO = new ImportingMetaDTO(
|
||||
workspaceId, applicationId, branchName, false, permissionProvider, null);
|
||||
|
||||
// Get the Application from DB
|
||||
Mono<Application> importedApplicationMono = applicationService
|
||||
|
|
|
|||
|
|
@ -117,18 +117,21 @@ public class NewActionExportableServiceCEImpl implements ExportableServiceCE<New
|
|||
newAction.setWorkspaceId(null);
|
||||
newAction.setPolicies(null);
|
||||
newAction.setApplicationId(null);
|
||||
dbNamesUsedInActions.add(sanitizeDatasourceInActionDTO(
|
||||
newAction.getPublishedAction(),
|
||||
mappedExportableResourcesDTO.getDatasourceIdToNameMap(),
|
||||
mappedExportableResourcesDTO.getPluginMap(),
|
||||
null,
|
||||
true));
|
||||
dbNamesUsedInActions.add(sanitizeDatasourceInActionDTO(
|
||||
newAction.getUnpublishedAction(),
|
||||
mappedExportableResourcesDTO.getDatasourceIdToNameMap(),
|
||||
mappedExportableResourcesDTO.getPluginMap(),
|
||||
null,
|
||||
true));
|
||||
if (hasExportableDatasource(newAction)) {
|
||||
// Only add the datasource for this action to dbNamesUsed if it is not a module action
|
||||
dbNamesUsedInActions.add(sanitizeDatasourceInActionDTO(
|
||||
newAction.getPublishedAction(),
|
||||
mappedExportableResourcesDTO.getDatasourceIdToNameMap(),
|
||||
mappedExportableResourcesDTO.getPluginMap(),
|
||||
null,
|
||||
true));
|
||||
dbNamesUsedInActions.add(sanitizeDatasourceInActionDTO(
|
||||
newAction.getUnpublishedAction(),
|
||||
mappedExportableResourcesDTO.getDatasourceIdToNameMap(),
|
||||
mappedExportableResourcesDTO.getPluginMap(),
|
||||
null,
|
||||
true));
|
||||
}
|
||||
|
||||
// Set unique id for action
|
||||
if (newAction.getUnpublishedAction() != null) {
|
||||
|
|
@ -172,4 +175,8 @@ public class NewActionExportableServiceCEImpl implements ExportableServiceCE<New
|
|||
});
|
||||
return dbNamesUsedInActions;
|
||||
}
|
||||
|
||||
protected boolean hasExportableDatasource(NewAction newAction) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import com.appsmith.server.helpers.ce.ImportApplicationPermissionProvider;
|
|||
import com.appsmith.server.imports.importable.ImportableServiceCE;
|
||||
import com.appsmith.server.newactions.base.NewActionService;
|
||||
import com.appsmith.server.repositories.NewActionRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
|
@ -41,25 +42,17 @@ import static com.appsmith.external.helpers.AppsmithBeanUtils.copyNestedNonNullP
|
|||
import static com.appsmith.server.helpers.ImportExportUtils.sanitizeDatasourceInActionDTO;
|
||||
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class NewActionImportableServiceCEImpl implements ImportableServiceCE<NewAction> {
|
||||
|
||||
private final NewActionService newActionService;
|
||||
private final NewActionRepository repository;
|
||||
private final ActionCollectionService actionCollectionService;
|
||||
|
||||
public NewActionImportableServiceCEImpl(
|
||||
NewActionService newActionService,
|
||||
NewActionRepository repository,
|
||||
ActionCollectionService actionCollectionService) {
|
||||
this.newActionService = newActionService;
|
||||
this.repository = repository;
|
||||
this.actionCollectionService = actionCollectionService;
|
||||
}
|
||||
|
||||
// Requires pageNameMap, pageNameToOldNameMap, pluginMap and datasourceNameToIdMap to be present in importable
|
||||
// Requires pageNameMap, pageNameToOldNameMap, pluginMap and datasourceNameToIdMap, to be present in importable
|
||||
// resources.
|
||||
// Updates actionResultDTO in importable resources.
|
||||
// Also directly updates required information in DB
|
||||
// Also, directly updates required information in DB
|
||||
@Override
|
||||
public Mono<Void> importEntities(
|
||||
ImportingMetaDTO importingMetaDTO,
|
||||
|
|
@ -102,7 +95,7 @@ public class NewActionImportableServiceCEImpl implements ImportableServiceCE<New
|
|||
// Delete the invalid resources (which are not the part of applicationJsonDTO) in
|
||||
// the git flow only
|
||||
if (StringUtils.hasText(importingMetaDTO.getApplicationId())
|
||||
&& !importingMetaDTO.getAppendToApp()
|
||||
&& !Boolean.TRUE.equals(importingMetaDTO.getAppendToApp())
|
||||
&& CollectionUtils.isNotEmpty(importActionResultDTO.getExistingActions())) {
|
||||
// Remove unwanted actions
|
||||
Set<String> invalidActionIds = new HashSet<>();
|
||||
|
|
@ -163,7 +156,7 @@ public class NewActionImportableServiceCEImpl implements ImportableServiceCE<New
|
|||
// Delete the invalid resources (which are not the part of applicationJsonDTO) in
|
||||
// the git flow only
|
||||
if (StringUtils.hasText(importingMetaDTO.getApplicationId())
|
||||
&& !importingMetaDTO.getAppendToApp()
|
||||
&& !Boolean.TRUE.equals(importingMetaDTO.getAppendToApp())
|
||||
&& Boolean.FALSE.equals(isPartialImport)) {
|
||||
// Remove unwanted action collections
|
||||
Set<String> invalidCollectionIds = new HashSet<>();
|
||||
|
|
@ -227,10 +220,8 @@ public class NewActionImportableServiceCEImpl implements ImportableServiceCE<New
|
|||
*/
|
||||
return Mono.just(application)
|
||||
.flatMap(importedApplication -> {
|
||||
Mono<Map<String, NewAction>> actionsInCurrentAppMono = repository
|
||||
.findByApplicationId(importedApplication.getId())
|
||||
.filter(newAction -> newAction.getGitSyncId() != null)
|
||||
.collectMap(NewAction::getGitSyncId);
|
||||
Mono<Map<String, NewAction>> actionsInCurrentAppMono =
|
||||
getActionsInCurrentAppMono(importedApplication).collectMap(NewAction::getGitSyncId);
|
||||
|
||||
// find existing actions in all the branches of this application and put them in a map
|
||||
Mono<Map<String, NewAction>> actionsInOtherBranchesMono;
|
||||
|
|
@ -341,16 +332,18 @@ public class NewActionImportableServiceCEImpl implements ImportableServiceCE<New
|
|||
log.error(
|
||||
"User does not have permission to create action in page with id: {}",
|
||||
parentPage.getId());
|
||||
throw new AppsmithException(
|
||||
return Mono.error(new AppsmithException(
|
||||
AppsmithError.ACL_NO_RESOURCE_FOUND,
|
||||
FieldName.PAGE,
|
||||
parentPage.getId());
|
||||
parentPage.getId()));
|
||||
}
|
||||
|
||||
populateDomainMappedReferences(mappedImportableResourcesDTO, newAction);
|
||||
|
||||
// this will generate the id and other auto generated fields e.g. createdAt
|
||||
newAction.updateForBulkWriteOperation();
|
||||
|
||||
// set gitSyncId if doesn't exist
|
||||
// set gitSyncId, if it doesn't exist
|
||||
if (newAction.getGitSyncId() == null) {
|
||||
newAction.setGitSyncId(newAction.getApplicationId() + "_"
|
||||
+ Instant.now().toString());
|
||||
|
|
@ -421,6 +414,17 @@ public class NewActionImportableServiceCEImpl implements ImportableServiceCE<New
|
|||
});
|
||||
}
|
||||
|
||||
protected void populateDomainMappedReferences(
|
||||
MappedImportableResourcesDTO mappedImportableResourcesDTO, NewAction newAction) {
|
||||
// Nothing needs to be copied into the action from mapped resources
|
||||
}
|
||||
|
||||
protected Flux<NewAction> getActionsInCurrentAppMono(Application importedApplication) {
|
||||
return repository
|
||||
.findByApplicationId(importedApplication.getId())
|
||||
.filter(newAction -> newAction.getGitSyncId() != null);
|
||||
}
|
||||
|
||||
private NewPage updatePageInAction(
|
||||
ActionDTO action, Map<String, NewPage> pageNameMap, Map<String, String> actionIdMap) {
|
||||
NewPage parentPage = pageNameMap.get(action.getPageId());
|
||||
|
|
@ -449,6 +453,9 @@ public class NewActionImportableServiceCEImpl implements ImportableServiceCE<New
|
|||
throw new AppsmithException(AppsmithError.ACL_NO_RESOURCE_FOUND, FieldName.ACTION, existingAction.getId());
|
||||
}
|
||||
Set<Policy> existingPolicy = existingAction.getPolicies();
|
||||
|
||||
updateImportableActionFromExistingAction(existingAction, actionToImport);
|
||||
|
||||
copyNestedNonNullProperties(actionToImport, existingAction);
|
||||
// Update branchName
|
||||
existingAction.getDefaultResources().setBranchName(branchName);
|
||||
|
|
@ -461,6 +468,10 @@ public class NewActionImportableServiceCEImpl implements ImportableServiceCE<New
|
|||
existingAction.setPolicies(existingPolicy);
|
||||
}
|
||||
|
||||
protected void updateImportableActionFromExistingAction(NewAction existingAction, NewAction actionToImport) {
|
||||
// Nothing to update from the existing action
|
||||
}
|
||||
|
||||
private void putActionIdInMap(NewAction newAction, ImportActionResultDTO importActionResultDTO) {
|
||||
// Populate actionIdsMap to associate the appropriate actions to run on page load
|
||||
if (newAction.getUnpublishedAction() != null) {
|
||||
|
|
|
|||
|
|
@ -60,8 +60,8 @@ public class NewPageImportableServiceCEImpl implements ImportableServiceCE<NewPa
|
|||
this.newActionService = newActionService;
|
||||
}
|
||||
|
||||
// Updates pageNametoIdMap and pageNameMap in importable resources.
|
||||
// Also directly updates required information in DB
|
||||
// Updates pageNameToIdMap and pageNameMap in importable resources.
|
||||
// Also, directly updates required information in DB
|
||||
@Override
|
||||
public Mono<Void> importEntities(
|
||||
ImportingMetaDTO importingMetaDTO,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.appsmith.server.repositories;
|
||||
|
||||
import com.appsmith.server.acl.AclPermission;
|
||||
import com.mongodb.client.result.InsertManyResult;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Update;
|
||||
|
|
@ -32,4 +33,19 @@ public interface AppsmithRepository<T> {
|
|||
Mono<T> setUserPermissionsInObject(T obj);
|
||||
|
||||
Mono<T> updateAndReturn(String id, Update updateObj, Optional<AclPermission> permission);
|
||||
|
||||
/**
|
||||
* This method uses the mongodb bulk operation to save a list of new actions. When calling this method, please note
|
||||
* the following points:
|
||||
* 1. All of them will be written to database in a single DB operation.
|
||||
* 2. The list of domains returned are same as the ones passed in the method.
|
||||
* 3. If you pass a domain without ID, the ID will be generated by the database but the returned action
|
||||
* will not have the ID.
|
||||
* 4. All the auto generated fields e.g. createdAt, updatedAt should be set by the caller.
|
||||
* They'll not be generated in the bulk write.
|
||||
* 5. No constraint validation will be performed on the new actions.
|
||||
* @param domainList List of domains that'll be saved in bulk
|
||||
* @return List of actions that were passed in the method
|
||||
*/
|
||||
Mono<List<InsertManyResult>> bulkInsert(List<T> domainList);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,9 +11,11 @@ import com.appsmith.server.exceptions.AppsmithException;
|
|||
import com.appsmith.server.repositories.CacheableRepositoryHelper;
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
import com.mongodb.client.result.InsertManyResult;
|
||||
import com.mongodb.client.result.UpdateResult;
|
||||
import com.querydsl.core.types.Path;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.bson.Document;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.GenericTypeResolver;
|
||||
import org.springframework.data.domain.Sort;
|
||||
|
|
@ -32,11 +34,13 @@ import reactor.core.publisher.Mono;
|
|||
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.apache.commons.collections.CollectionUtils.isEmpty;
|
||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||
|
|
@ -722,4 +726,24 @@ public abstract class BaseAppsmithRepositoryCEImpl<T extends BaseDomain> {
|
|||
return mongoOperations.findAndModify(query, updateObj, findAndModifyOptions, this.genericDomain);
|
||||
});
|
||||
}
|
||||
|
||||
public Mono<List<InsertManyResult>> bulkInsert(List<T> domainList) {
|
||||
if (CollectionUtils.isEmpty(domainList)) {
|
||||
return Mono.just(Collections.emptyList());
|
||||
}
|
||||
|
||||
// convert the list of domains to a list of DBObjects
|
||||
List<Document> dbObjects = domainList.stream()
|
||||
.map(domain -> {
|
||||
Document document = new Document();
|
||||
mongoOperations.getConverter().write(domain, document);
|
||||
return document;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return mongoOperations
|
||||
.getCollection(mongoOperations.getCollectionName(genericDomain))
|
||||
.flatMapMany(documentMongoCollection -> documentMongoCollection.insertMany(dbObjects))
|
||||
.collectList();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import com.appsmith.server.acl.AclPermission;
|
|||
import com.appsmith.server.domains.ActionCollection;
|
||||
import com.appsmith.server.repositories.AppsmithRepository;
|
||||
import com.mongodb.bulk.BulkWriteResult;
|
||||
import com.mongodb.client.result.InsertManyResult;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
|
@ -50,8 +49,6 @@ public interface CustomActionCollectionRepositoryCE extends AppsmithRepository<A
|
|||
|
||||
Flux<ActionCollection> findByPageIds(List<String> pageIds, Optional<AclPermission> permission);
|
||||
|
||||
Mono<List<InsertManyResult>> bulkInsert(List<ActionCollection> newActions);
|
||||
|
||||
Mono<List<BulkWriteResult>> bulkUpdate(List<ActionCollection> actionCollections);
|
||||
|
||||
Flux<ActionCollection> findAllByApplicationIds(List<String> applicationIds, List<String> includeFields);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import com.appsmith.server.repositories.CacheableRepositoryHelper;
|
|||
import com.mongodb.bulk.BulkWriteResult;
|
||||
import com.mongodb.client.model.UpdateOneModel;
|
||||
import com.mongodb.client.model.WriteModel;
|
||||
import com.mongodb.client.result.InsertManyResult;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.bson.Document;
|
||||
import org.bson.types.ObjectId;
|
||||
|
|
@ -237,27 +236,6 @@ public class CustomActionCollectionRepositoryCEImpl extends BaseAppsmithReposito
|
|||
return queryAll(List.of(pageIdCriteria), permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<List<InsertManyResult>> bulkInsert(List<ActionCollection> actionCollectionList) {
|
||||
if (CollectionUtils.isEmpty(actionCollectionList)) {
|
||||
return Mono.just(Collections.emptyList());
|
||||
}
|
||||
|
||||
// convert the list of action collections to a list of DBObjects
|
||||
List<Document> dbObjects = actionCollectionList.stream()
|
||||
.map(actionCollection -> {
|
||||
Document document = new Document();
|
||||
mongoOperations.getConverter().write(actionCollection, document);
|
||||
return document;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return mongoOperations
|
||||
.getCollection(mongoOperations.getCollectionName(ActionCollection.class))
|
||||
.flatMapMany(documentMongoCollection -> documentMongoCollection.insertMany(dbObjects))
|
||||
.collectList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<List<BulkWriteResult>> bulkUpdate(List<ActionCollection> actionCollections) {
|
||||
if (CollectionUtils.isEmpty(actionCollections)) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import com.appsmith.server.domains.NewAction;
|
|||
import com.appsmith.server.dtos.PluginTypeAndCountDTO;
|
||||
import com.appsmith.server.repositories.AppsmithRepository;
|
||||
import com.mongodb.bulk.BulkWriteResult;
|
||||
import com.mongodb.client.result.InsertManyResult;
|
||||
import com.mongodb.client.result.UpdateResult;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import reactor.core.publisher.Flux;
|
||||
|
|
@ -74,8 +73,6 @@ public interface CustomNewActionRepositoryCE extends AppsmithRepository<NewActio
|
|||
Flux<NewAction> findAllNonJsActionsByNameAndPageIdsAndViewMode(
|
||||
String name, List<String> pageIds, Boolean viewMode, AclPermission aclPermission, Sort sort);
|
||||
|
||||
Mono<List<InsertManyResult>> bulkInsert(List<NewAction> newActions);
|
||||
|
||||
Mono<List<BulkWriteResult>> bulkUpdate(List<NewAction> newActions);
|
||||
|
||||
Mono<List<BulkWriteResult>> publishActions(String applicationId, AclPermission permission);
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import com.appsmith.server.repositories.CacheableRepositoryHelper;
|
|||
import com.mongodb.bulk.BulkWriteResult;
|
||||
import com.mongodb.client.model.UpdateOneModel;
|
||||
import com.mongodb.client.model.WriteModel;
|
||||
import com.mongodb.client.result.InsertManyResult;
|
||||
import com.mongodb.client.result.UpdateResult;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.bson.Document;
|
||||
|
|
@ -538,39 +537,6 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl<
|
|||
return criteriaList;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method uses the mongodb bulk operation to save a list of new actions. When calling this method, please note
|
||||
* the following points:
|
||||
* 1. All of them will be written to database in a single DB operation.
|
||||
* 2. The list of new actions returned are same as the ones passed in the method.
|
||||
* 3. If you pass an action without ID, the ID will be generated by the database but the returned action
|
||||
* will not have the ID.
|
||||
* 4. All the auto generated fields e.g. createdAt, updatedAt should be set by the caller.
|
||||
* They'll not be generated in the bulk write.
|
||||
* 5. No constraint validation will be performed on the new actions.
|
||||
* @param newActions List of actions that'll be saved in bulk
|
||||
* @return List of actions that were passed in the method
|
||||
*/
|
||||
@Override
|
||||
public Mono<List<InsertManyResult>> bulkInsert(List<NewAction> newActions) {
|
||||
if (CollectionUtils.isEmpty(newActions)) {
|
||||
return Mono.just(Collections.emptyList());
|
||||
}
|
||||
// convert the list of new actions to a list of DBObjects
|
||||
List<Document> dbObjects = newActions.stream()
|
||||
.map(newAction -> {
|
||||
Document document = new Document();
|
||||
mongoOperations.getConverter().write(newAction, document);
|
||||
return document;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return mongoOperations
|
||||
.getCollection(mongoOperations.getCollectionName(NewAction.class))
|
||||
.flatMapMany(documentMongoCollection -> documentMongoCollection.insertMany(dbObjects))
|
||||
.collectList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<List<BulkWriteResult>> bulkUpdate(List<NewAction> newActions) {
|
||||
if (CollectionUtils.isEmpty(newActions)) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user