From e473070045a14a3659aba26d39947a0f2a41226f Mon Sep 17 00:00:00 2001 From: Shrikant Sharat Kandula Date: Tue, 30 Jan 2024 19:19:53 +0530 Subject: [PATCH] chore: Slim seed data (#30671) --- .../server/configurations/SeedMongoData.java | 180 +----------------- 1 file changed, 8 insertions(+), 172 deletions(-) diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/configurations/SeedMongoData.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/configurations/SeedMongoData.java index f38a76c239..98b1dbd011 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/configurations/SeedMongoData.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/configurations/SeedMongoData.java @@ -2,18 +2,13 @@ package com.appsmith.server.configurations; import com.appsmith.external.models.PluginType; import com.appsmith.external.models.Policy; -import com.appsmith.server.domains.Application; import com.appsmith.server.domains.PermissionGroup; import com.appsmith.server.domains.Plugin; import com.appsmith.server.domains.PricingPlan; import com.appsmith.server.domains.Tenant; import com.appsmith.server.domains.User; import com.appsmith.server.domains.UserState; -import com.appsmith.server.domains.Workspace; -import com.appsmith.server.domains.WorkspacePlugin; import com.appsmith.server.dtos.Permission; -import com.appsmith.server.dtos.WorkspacePluginStatus; -import com.appsmith.server.repositories.ApplicationRepository; import com.appsmith.server.repositories.PermissionGroupRepository; import com.appsmith.server.repositories.PluginRepository; import com.appsmith.server.repositories.TenantRepository; @@ -24,29 +19,17 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.mongodb.core.ReactiveMongoTemplate; -import org.springframework.data.mongodb.core.query.Query; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.Arrays; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; -import static com.appsmith.server.acl.AclPermission.MANAGE_APPLICATIONS; import static com.appsmith.server.acl.AclPermission.MANAGE_USERS; -import static com.appsmith.server.acl.AclPermission.MANAGE_WORKSPACES; -import static com.appsmith.server.acl.AclPermission.READ_APPLICATIONS; import static com.appsmith.server.acl.AclPermission.READ_USERS; -import static com.appsmith.server.acl.AclPermission.READ_WORKSPACES; import static com.appsmith.server.acl.AclPermission.USER_MANAGE_WORKSPACES; -import static com.appsmith.server.acl.AclPermission.WORKSPACE_EXPORT_APPLICATIONS; -import static com.appsmith.server.acl.AclPermission.WORKSPACE_INVITE_USERS; -import static com.appsmith.server.acl.AclPermission.WORKSPACE_MANAGE_APPLICATIONS; -import static org.springframework.data.mongodb.core.query.Criteria.where; @Slf4j @Configuration @@ -56,9 +39,7 @@ public class SeedMongoData { ApplicationRunner init( UserRepository userRepository, WorkspaceRepository workspaceRepository, - ApplicationRepository applicationRepository, PluginRepository pluginRepository, - ReactiveMongoTemplate mongoTemplate, TenantRepository tenantRepository, PermissionGroupRepository permissionGroupRepository, PolicySolution policySolution) { @@ -69,32 +50,9 @@ public class SeedMongoData { final String ADMIN_USER_EMAIL = "admin@solutiontest.com"; final String DEV_USER_EMAIL = "developer@solutiontest.com"; - Policy manageAppPolicy = - Policy.builder().permission(MANAGE_APPLICATIONS.getValue()).build(); - - Policy readAppPolicy = - Policy.builder().permission(READ_APPLICATIONS.getValue()).build(); - - Policy manageWorkspaceAppPolicy = Policy.builder() - .permission(WORKSPACE_MANAGE_APPLICATIONS.getValue()) - .build(); - - Policy exportWorkspaceAppPolicy = Policy.builder() - .permission(WORKSPACE_EXPORT_APPLICATIONS.getValue()) - .build(); - Policy userManageWorkspacePolicy = Policy.builder().permission(USER_MANAGE_WORKSPACES.getValue()).build(); - Policy inviteUserWorkspacePolicy = - Policy.builder().permission(WORKSPACE_INVITE_USERS.getValue()).build(); - - Policy readWorkspacePolicy = - Policy.builder().permission(READ_WORKSPACES.getValue()).build(); - - Policy manageWorkspacePolicy = - Policy.builder().permission(MANAGE_WORKSPACES.getValue()).build(); - Policy readApiUserPolicy = Policy.builder().permission(READ_USERS.getValue()).build(); @@ -136,38 +94,7 @@ public class SeedMongoData { new HashSet<>(Arrays.asList(readDevUserPolicy, userManageWorkspacePolicy)) }, }; - Object[][] workspaceData = { - { - "Spring Test Workspace", - "appsmith-spring-test.com", - "appsmith.com", - "spring-test-workspace", - Set.of( - manageWorkspaceAppPolicy, - manageWorkspacePolicy, - readWorkspacePolicy, - inviteUserWorkspacePolicy, - exportWorkspaceAppPolicy) - }, - { - "Another Test Workspace", - "appsmith-another-test.com", - "appsmith.com", - "another-test-workspace", - Set.of( - manageWorkspaceAppPolicy, - manageWorkspacePolicy, - readWorkspacePolicy, - inviteUserWorkspacePolicy, - exportWorkspaceAppPolicy) - } - }; - Object[][] appData = { - {"LayoutServiceTest TestApplications", Set.of(manageAppPolicy, readAppPolicy)}, - {"TestApplications", Set.of(manageAppPolicy, readAppPolicy)}, - {"Another TestApplications", Set.of(manageAppPolicy, readAppPolicy)} - }; Object[][] pluginData = { {"Installed Plugin Name", PluginType.API, "installed-plugin", true}, {"Installed DB Plugin Name", PluginType.DB, "installed-db-plugin", true}, @@ -188,8 +115,7 @@ public class SeedMongoData { log.debug("Create plugin: {}", plugin); return plugin; }) - .flatMap(pluginRepository::save) - .cache(); + .flatMap(pluginRepository::save); Tenant defaultTenant = new Tenant(); defaultTenant.setDisplayName("Default"); @@ -203,13 +129,17 @@ public class SeedMongoData { .cache(); Flux userFlux = Flux.just(userData) - .flatMap(array -> { + .zipWith(defaultTenantId.repeat()) + .flatMap(tuple -> { + Object[] array = tuple.getT1(); + String tenantId = tuple.getT2(); log.debug("Going to create bare users"); User user = new User(); user.setName((String) array[0]); user.setEmail((String) array[1]); user.setState((UserState) array[2]); user.setPolicies((Set) array[3]); + user.setTenantId(tenantId); return userRepository.save(user); }) .flatMap(user -> { @@ -226,104 +156,10 @@ public class SeedMongoData { return userRepository.save(updatedWithPolicies); }); - }) - .collectList() - .zipWith(defaultTenantId) - .flatMapMany(tuple -> { - List users = tuple.getT1(); - String tenantId = tuple.getT2(); - return Flux.fromIterable(users).map(user -> { - user.setTenantId(tenantId); - log.debug("Creating user: {}", user); - return user; - }); - }) - .flatMap(userRepository::save) - .cache(); + }); - // Seed the workspace data into the DB - Flux workspaceFlux = mongoTemplate - .find( - new Query().addCriteria(where("name").in(pluginData[0][0], pluginData[1][0], pluginData[2][0])), - Plugin.class) - .map(plugin -> new WorkspacePlugin(plugin.getId(), WorkspacePluginStatus.FREE)) - .collect(Collectors.toSet()) - .cache() - .repeat() - .zipWithIterable(List.of(workspaceData)) - .map(tuple -> { - final Set workspacePlugins = tuple.getT1(); - final Object[] workspaceArray = tuple.getT2(); - - Workspace workspace = new Workspace(); - workspace.setName((String) workspaceArray[0]); - workspace.setDomain((String) workspaceArray[1]); - workspace.setWebsite((String) workspaceArray[2]); - workspace.setSlug((String) workspaceArray[3]); - workspace.setPolicies((Set) workspaceArray[4]); - workspace.setPlugins(workspacePlugins); - - log.debug("In the workspaceFlux. Create Workspace: {}", workspace); - return workspace; - }) - .flatMap(workspaceRepository::save); - - Flux workspaceFlux1 = workspaceRepository - .deleteAll() - .thenMany(pluginFlux) - .thenMany(userFlux) - .thenMany(workspaceFlux); - - Flux addUserWorkspaceFlux = workspaceFlux1.flatMap(workspace -> userFlux.flatMap(user -> { - log.debug("**** In the addUserWorkspaceFlux"); - log.debug("User: {}", user); - log.debug("Workspace: {}", workspace); - user.setCurrentWorkspaceId(workspace.getId()); - Set workspaceIds = user.getWorkspaceIds(); - if (workspaceIds == null) { - workspaceIds = new HashSet<>(); - } - workspaceIds.add(workspace.getId()); - user.setWorkspaceIds(workspaceIds); - log.debug("AddUserWorkspace User: {}, Workspace: {}", user, workspace); - return userRepository.save(user).map(u -> { - log.debug("Saved the workspace to user. User: {}", u); - return u; - }); - })); - - Query workspaceNameQuery = new Query(where("slug").is(workspaceData[0][3])); - Mono workspaceByNameMono = mongoTemplate - .findOne(workspaceNameQuery, Workspace.class) - .switchIfEmpty(Mono.error(new Exception("Can't find workspace"))); - - Query appNameQuery = new Query(where("name").is(appData[0][0])); - Mono appByNameMono = mongoTemplate - .findOne(appNameQuery, Application.class) - .switchIfEmpty(Mono.error(new Exception("Can't find app"))); return args -> { - workspaceFlux1 - .thenMany(addUserWorkspaceFlux) - // Query the seed data to get the workspaceId (required for application creation) - .then(workspaceByNameMono) - .map(workspace -> workspace.getId()) - // Seed the user data into the DB - .flatMapMany( - workspaceId -> - // Seed the application data into the DB - Flux.just(appData) - .map(array -> { - Application app = new Application(); - app.setName((String) array[0]); - app.setWorkspaceId(workspaceId); - app.setPolicies((Set) array[1]); - return app; - }) - .flatMap(applicationRepository::save) - // Query the seed data to get the applicationId (required for page creation) - ) - .then(appByNameMono) - .block(); + Mono.when(workspaceRepository.deleteAll(), pluginFlux, userFlux).block(); }; } }