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.PluginType;
|
||||||
import com.appsmith.external.models.Policy;
|
import com.appsmith.external.models.Policy;
|
||||||
import com.appsmith.server.domains.Application;
|
|
||||||
import com.appsmith.server.domains.PermissionGroup;
|
import com.appsmith.server.domains.PermissionGroup;
|
||||||
import com.appsmith.server.domains.Plugin;
|
import com.appsmith.server.domains.Plugin;
|
||||||
import com.appsmith.server.domains.PricingPlan;
|
import com.appsmith.server.domains.PricingPlan;
|
||||||
import com.appsmith.server.domains.Tenant;
|
import com.appsmith.server.domains.Tenant;
|
||||||
import com.appsmith.server.domains.User;
|
import com.appsmith.server.domains.User;
|
||||||
import com.appsmith.server.domains.UserState;
|
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.Permission;
|
||||||
import com.appsmith.server.dtos.WorkspacePluginStatus;
|
|
||||||
import com.appsmith.server.repositories.ApplicationRepository;
|
|
||||||
import com.appsmith.server.repositories.PermissionGroupRepository;
|
import com.appsmith.server.repositories.PermissionGroupRepository;
|
||||||
import com.appsmith.server.repositories.PluginRepository;
|
import com.appsmith.server.repositories.PluginRepository;
|
||||||
import com.appsmith.server.repositories.TenantRepository;
|
import com.appsmith.server.repositories.TenantRepository;
|
||||||
|
|
@ -24,29 +19,17 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.boot.ApplicationRunner;
|
import org.springframework.boot.ApplicationRunner;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
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.Flux;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
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_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_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.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
|
@Slf4j
|
||||||
@Configuration
|
@Configuration
|
||||||
|
|
@ -56,9 +39,7 @@ public class SeedMongoData {
|
||||||
ApplicationRunner init(
|
ApplicationRunner init(
|
||||||
UserRepository userRepository,
|
UserRepository userRepository,
|
||||||
WorkspaceRepository workspaceRepository,
|
WorkspaceRepository workspaceRepository,
|
||||||
ApplicationRepository applicationRepository,
|
|
||||||
PluginRepository pluginRepository,
|
PluginRepository pluginRepository,
|
||||||
ReactiveMongoTemplate mongoTemplate,
|
|
||||||
TenantRepository tenantRepository,
|
TenantRepository tenantRepository,
|
||||||
PermissionGroupRepository permissionGroupRepository,
|
PermissionGroupRepository permissionGroupRepository,
|
||||||
PolicySolution policySolution) {
|
PolicySolution policySolution) {
|
||||||
|
|
@ -69,32 +50,9 @@ public class SeedMongoData {
|
||||||
final String ADMIN_USER_EMAIL = "admin@solutiontest.com";
|
final String ADMIN_USER_EMAIL = "admin@solutiontest.com";
|
||||||
final String DEV_USER_EMAIL = "developer@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 userManageWorkspacePolicy =
|
||||||
Policy.builder().permission(USER_MANAGE_WORKSPACES.getValue()).build();
|
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 readApiUserPolicy =
|
||||||
Policy.builder().permission(READ_USERS.getValue()).build();
|
Policy.builder().permission(READ_USERS.getValue()).build();
|
||||||
|
|
||||||
|
|
@ -136,38 +94,7 @@ public class SeedMongoData {
|
||||||
new HashSet<>(Arrays.asList(readDevUserPolicy, userManageWorkspacePolicy))
|
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 = {
|
Object[][] pluginData = {
|
||||||
{"Installed Plugin Name", PluginType.API, "installed-plugin", true},
|
{"Installed Plugin Name", PluginType.API, "installed-plugin", true},
|
||||||
{"Installed DB Plugin Name", PluginType.DB, "installed-db-plugin", true},
|
{"Installed DB Plugin Name", PluginType.DB, "installed-db-plugin", true},
|
||||||
|
|
@ -188,8 +115,7 @@ public class SeedMongoData {
|
||||||
log.debug("Create plugin: {}", plugin);
|
log.debug("Create plugin: {}", plugin);
|
||||||
return plugin;
|
return plugin;
|
||||||
})
|
})
|
||||||
.flatMap(pluginRepository::save)
|
.flatMap(pluginRepository::save);
|
||||||
.cache();
|
|
||||||
|
|
||||||
Tenant defaultTenant = new Tenant();
|
Tenant defaultTenant = new Tenant();
|
||||||
defaultTenant.setDisplayName("Default");
|
defaultTenant.setDisplayName("Default");
|
||||||
|
|
@ -203,13 +129,17 @@ public class SeedMongoData {
|
||||||
.cache();
|
.cache();
|
||||||
|
|
||||||
Flux<User> userFlux = Flux.just(userData)
|
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");
|
log.debug("Going to create bare users");
|
||||||
User user = new User();
|
User user = new User();
|
||||||
user.setName((String) array[0]);
|
user.setName((String) array[0]);
|
||||||
user.setEmail((String) array[1]);
|
user.setEmail((String) array[1]);
|
||||||
user.setState((UserState) array[2]);
|
user.setState((UserState) array[2]);
|
||||||
user.setPolicies((Set<Policy>) array[3]);
|
user.setPolicies((Set<Policy>) array[3]);
|
||||||
|
user.setTenantId(tenantId);
|
||||||
return userRepository.save(user);
|
return userRepository.save(user);
|
||||||
})
|
})
|
||||||
.flatMap(user -> {
|
.flatMap(user -> {
|
||||||
|
|
@ -226,104 +156,10 @@ public class SeedMongoData {
|
||||||
|
|
||||||
return userRepository.save(updatedWithPolicies);
|
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 -> {
|
return args -> {
|
||||||
workspaceFlux1
|
Mono.when(workspaceRepository.deleteAll(), pluginFlux, userFlux).block();
|
||||||
.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();
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user