chore: Slim seed data (#30671)
This commit is contained in:
parent
3404d3a38b
commit
e473070045
|
|
@ -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<User> 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<Policy>) 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<User> 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<Workspace> 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<WorkspacePlugin> 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<Policy>) workspaceArray[4]);
|
||||
workspace.setPlugins(workspacePlugins);
|
||||
|
||||
log.debug("In the workspaceFlux. Create Workspace: {}", workspace);
|
||||
return workspace;
|
||||
})
|
||||
.flatMap(workspaceRepository::save);
|
||||
|
||||
Flux<Workspace> workspaceFlux1 = workspaceRepository
|
||||
.deleteAll()
|
||||
.thenMany(pluginFlux)
|
||||
.thenMany(userFlux)
|
||||
.thenMany(workspaceFlux);
|
||||
|
||||
Flux<User> 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<String> 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<Workspace> 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<Application> 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<Policy>) 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();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user