Skip to content

Commit cb81b14

Browse files
committed
1.set quick rest api as a system static data source
2.set quick graphql api and openblocksApi as a system static data source 3.render graphql query body
1 parent 3147492 commit cb81b14

File tree

28 files changed

+267
-143
lines changed

28 files changed

+267
-143
lines changed

server/openblocks-domain/src/main/java/com/openblocks/domain/configurations/MongoConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.util.List;
44

5+
import javax.annotation.PostConstruct;
6+
57
import org.springframework.beans.factory.annotation.Autowired;
68
import org.springframework.context.ApplicationContext;
79
import org.springframework.context.annotation.Bean;
@@ -40,6 +42,14 @@ public class MongoConfig {
4042
@Autowired
4143
private MaterialProperties materialProperties;
4244

45+
@Autowired
46+
private MappingMongoConverter mappingMongoConverter;
47+
48+
@PostConstruct
49+
public void init() {
50+
mappingMongoConverter.setMapKeyDotReplacement("_");
51+
}
52+
4353
@Bean
4454
public MongockSpring5.MongockApplicationRunner mongockApplicationRunner(ApplicationContext springContext, MongoTemplate mongoTemplate) {
4555
SpringDataMongoV3Driver springDataMongoV3Driver = SpringDataMongoV3Driver.withDefaultLock(mongoTemplate);

server/openblocks-domain/src/main/java/com/openblocks/domain/datasource/model/Datasource.java

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
11
package com.openblocks.domain.datasource.model;
22

3+
import static com.openblocks.domain.datasource.model.DatasourceCreationSource.LEGACY_WORKSPACE_PREDEFINED;
4+
import static com.openblocks.domain.datasource.model.DatasourceCreationSource.SYSTEM_STATIC;
5+
import static com.openblocks.domain.plugin.DatasourceMetaInfoConstants.GRAPHQL_API;
6+
import static com.openblocks.domain.plugin.DatasourceMetaInfoConstants.REST_API;
7+
8+
import java.util.Locale;
39
import java.util.Optional;
10+
import java.util.Set;
411

512
import org.apache.commons.lang3.ObjectUtils;
613

14+
import com.fasterxml.jackson.annotation.JsonIgnore;
715
import com.fasterxml.jackson.annotation.JsonProperty;
16+
import com.openblocks.domain.plugin.DatasourceMetaInfoConstants;
817
import com.openblocks.sdk.models.DatasourceConnectionConfig;
918
import com.openblocks.sdk.models.HasIdAndAuditing;
19+
import com.openblocks.sdk.plugin.graphql.GraphQLDatasourceConfig;
20+
import com.openblocks.sdk.plugin.openblocksapi.OpenblocksApiDatasourceConfig;
21+
import com.openblocks.sdk.plugin.restapi.RestApiDatasourceConfig;
22+
import com.openblocks.sdk.util.LocaleUtils;
1023

1124
import lombok.Getter;
1225
import lombok.Setter;
@@ -16,6 +29,39 @@
1629
public class Datasource extends HasIdAndAuditing {
1730

1831
private static final DatasourceStatus DEFAULT_STATUS = DatasourceStatus.NORMAL;
32+
public static final String QUICK_REST_API_ID = "#QUICK_REST_API";
33+
public static final String QUICK_GRAPHQL_ID = "#QUICK_GRAPHQL";
34+
public static final String OPENBLOCKS_API_ID = "#OPENBLOCKS_API";
35+
36+
private static final Set<String> SYSTEM_STATIC_IDS = Set.of(QUICK_REST_API_ID,
37+
QUICK_GRAPHQL_ID, OPENBLOCKS_API_ID);
38+
39+
public static final Datasource QUICK_REST_API;
40+
public static final Datasource QUICK_GRAPHQL_API;
41+
public static final Datasource OPENBLOCKS_API;
42+
43+
static {
44+
QUICK_REST_API = new Datasource();
45+
QUICK_REST_API.setId(QUICK_REST_API_ID);
46+
QUICK_REST_API.setName("REST API");
47+
QUICK_REST_API.setType(REST_API);
48+
QUICK_REST_API.setCreationSource(SYSTEM_STATIC.getValue());
49+
QUICK_REST_API.setDetailConfig(RestApiDatasourceConfig.EMPTY_CONFIG);
50+
51+
QUICK_GRAPHQL_API = new Datasource();
52+
QUICK_GRAPHQL_API.setId(QUICK_GRAPHQL_ID);
53+
QUICK_GRAPHQL_API.setName("GraphQL API");
54+
QUICK_GRAPHQL_API.setType(GRAPHQL_API);
55+
QUICK_GRAPHQL_API.setCreationSource(SYSTEM_STATIC.getValue());
56+
QUICK_GRAPHQL_API.setDetailConfig(GraphQLDatasourceConfig.EMPTY_CONFIG);
57+
58+
OPENBLOCKS_API = new Datasource();
59+
OPENBLOCKS_API.setId(OPENBLOCKS_API_ID);
60+
OPENBLOCKS_API.setName("Openblocks API");
61+
OPENBLOCKS_API.setType(DatasourceMetaInfoConstants.OPENBLOCKS_API);
62+
OPENBLOCKS_API.setCreationSource(SYSTEM_STATIC.getValue());
63+
OPENBLOCKS_API.setDetailConfig(OpenblocksApiDatasourceConfig.INSTANCE);
64+
}
1965

2066
private String name;
2167
private String type;
@@ -38,11 +84,53 @@ public Datasource mergeWith(Datasource updatedDatasource) {
3884
return this;
3985
}
4086

87+
@JsonIgnore
88+
public boolean isSystemStatic() {
89+
return creationSource == SYSTEM_STATIC.getValue();
90+
}
91+
92+
public static String getDisplayName(String datasourceId, Locale locale) {
93+
if (QUICK_REST_API_ID.equals(datasourceId)) {
94+
return LocaleUtils.getMessage(locale, "QUICK_REST_DATASOURCE_NAME");
95+
}
96+
97+
if (QUICK_GRAPHQL_ID.equals(datasourceId)) {
98+
return LocaleUtils.getMessage(locale, "QUICK_GRAPHQL_DATASOURCE_NAME");
99+
}
100+
101+
if (OPENBLOCKS_API_ID.equals(datasourceId)) {
102+
return LocaleUtils.getMessage(locale, "OPENBLOCKS_DATASOURCE_NAME");
103+
}
104+
return "";
105+
}
106+
107+
@JsonIgnore
108+
public boolean isLegacyQuickRestApi() {
109+
return REST_API.equals(type) && creationSource == LEGACY_WORKSPACE_PREDEFINED.getValue();
110+
}
111+
112+
@JsonIgnore
113+
public boolean isLegacyOpenblocksApi() {
114+
return !REST_API.equals(type) && creationSource == LEGACY_WORKSPACE_PREDEFINED.getValue();
115+
}
116+
117+
public String getOrganizationId() {
118+
return organizationId;
119+
}
120+
41121
public long getCreateTime() {
42122
return createdAt.toEpochMilli();
43123
}
44124

45125
public DatasourceStatus getDatasourceStatus() {
46126
return ObjectUtils.firstNonNull(this.datasourceStatus, DEFAULT_STATUS);
47127
}
128+
129+
public static boolean isSystemStaticId(String datasourceId) {
130+
return SYSTEM_STATIC_IDS.contains(datasourceId);
131+
}
132+
133+
public static boolean isNotSystemStaticId(String datasourceId) {
134+
return !isSystemStaticId(datasourceId);
135+
}
48136
}

server/openblocks-domain/src/main/java/com/openblocks/domain/datasource/model/DatasourceCreationSource.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
@Getter
88
public enum DatasourceCreationSource {
99
USER_CREATED(0),
10-
SYSTEM_TEMPLATE(1), // e.g. onboard datasource/template datasource, and user can update it later
11-
SYSTEM_PREDEFINED(2), // e.g. rest api empty datasource, internal datasource, cannot be modified
10+
CLONE_FROM_TEMPLATE(1), // e.g. onboard datasource/template datasource, and user can update it later
11+
@Deprecated
12+
LEGACY_WORKSPACE_PREDEFINED(2), // e.g. openblocks api, automatically created with creation of a workspace, cannot be modified
13+
SYSTEM_STATIC(3), // e.g. rest api/graphQL quick data source, only exist in memory and doesn't store in DB
1214
;
1315

1416
private final int value;

server/openblocks-domain/src/main/java/com/openblocks/domain/datasource/repository/DatasourceRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ public Mono<Datasource> findById(String datasourceId) {
4545
.map(this::convertToDomainObjectAndDecrypt);
4646
}
4747

48-
public Mono<Datasource> findSystemPredefinedDatasourceByOrgIdAndType(String organizationId, String type) {
48+
public Mono<Datasource> findWorkspacePredefinedDatasourceByOrgIdAndType(String organizationId, String type) {
4949
return repository.findByOrganizationIdAndTypeAndCreationSource(organizationId, type,
50-
DatasourceCreationSource.SYSTEM_PREDEFINED.getValue())
50+
DatasourceCreationSource.LEGACY_WORKSPACE_PREDEFINED.getValue())
5151
.map(this::convertToDomainObjectAndDecrypt);
5252
}
5353

server/openblocks-domain/src/main/java/com/openblocks/domain/datasource/service/DatasourceService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ public interface DatasourceService {
2222

2323
Mono<Long> countByOrganizationId(String orgId);
2424

25-
Mono<Datasource> findSystemPredefinedDatasource(String organizationId, String datasourceType);
25+
Mono<Datasource> findWorkspacePredefinedDatasource(String organizationId, String datasourceType);
2626
}

server/openblocks-domain/src/main/java/com/openblocks/domain/datasource/service/impl/DatasourceServiceImpl.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import com.google.common.base.Joiner;
2121
import com.openblocks.domain.application.model.ApplicationStatus;
2222
import com.openblocks.domain.application.repository.ApplicationRepository;
23-
import com.openblocks.domain.application.service.ApplicationService;
2423
import com.openblocks.domain.datasource.model.Datasource;
2524
import com.openblocks.domain.datasource.repository.DatasourceRepository;
2625
import com.openblocks.domain.datasource.service.DatasourceService;
@@ -43,6 +42,7 @@
4342
public class DatasourceServiceImpl implements DatasourceService {
4443

4544
private static final Duration DEFAULT_TEST_CONNECTION_TIMEOUT = Duration.ofSeconds(10);
45+
private static final String INVALID_PARAMETER_CODE = "INVALID_PARAMETER";
4646

4747
@Autowired
4848
private DatasourceMetaInfoService datasourceMetaInfoService;
@@ -51,14 +51,12 @@ public class DatasourceServiceImpl implements DatasourceService {
5151
@Autowired
5252
private ResourcePermissionService resourcePermissionService;
5353
@Autowired
54-
private ApplicationService applicationService;
55-
@Autowired
5654
private DatasourceRepository repository;
5755

5856
@Override
5957
public Mono<Datasource> create(Datasource datasource, String creatorId) {
6058
if (datasource.getId() != null) {
61-
return Mono.error(new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.ID));
59+
return Mono.error(new BizException(BizError.INVALID_PARAMETER, INVALID_PARAMETER_CODE, FieldName.ID));
6260
}
6361

6462
return Mono.just(datasource)
@@ -72,7 +70,7 @@ public Mono<Datasource> create(Datasource datasource, String creatorId) {
7270
public Mono<Datasource> update(String datasourceId, Datasource updatedDatasource) {
7371

7472
if (datasourceId == null) {
75-
return Mono.error(new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.ID));
73+
return Mono.error(new BizException(BizError.INVALID_PARAMETER, INVALID_PARAMETER_CODE, FieldName.ID));
7674
}
7775

7876
return repository.findById(datasourceId)
@@ -83,17 +81,30 @@ public Mono<Datasource> update(String datasourceId, Datasource updatedDatasource
8381

8482
@Override
8583
public Mono<Datasource> getById(String id) {
84+
85+
if (StringUtils.equals(id, Datasource.QUICK_REST_API_ID)) {
86+
return Mono.just(Datasource.QUICK_REST_API);
87+
}
88+
89+
if (StringUtils.equals(id, Datasource.QUICK_GRAPHQL_ID)) {
90+
return Mono.just(Datasource.QUICK_GRAPHQL_API);
91+
}
92+
93+
if (StringUtils.equals(id, Datasource.OPENBLOCKS_API_ID)) {
94+
return Mono.just(Datasource.OPENBLOCKS_API);
95+
}
96+
8697
return repository.findById(id);
8798
}
8899

89100
private Mono<Datasource> validateDatasource(Datasource datasource) {
90101

91102
if (datasource.getOrganizationId() == null) {
92-
throw new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.ORGANIZATION_ID);
103+
throw new BizException(BizError.INVALID_PARAMETER, INVALID_PARAMETER_CODE, FieldName.ORGANIZATION_ID);
93104
}
94105

95106
if (StringUtils.isBlank(datasource.getName())) {
96-
throw new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.NAME);
107+
throw new BizException(BizError.INVALID_PARAMETER, INVALID_PARAMETER_CODE, FieldName.NAME);
97108
}
98109

99110
if (datasource.getType() == null) {
@@ -163,8 +174,8 @@ public Mono<Long> countByOrganizationId(String orgId) {
163174
}
164175

165176
@Override
166-
public Mono<Datasource> findSystemPredefinedDatasource(String organizationId, String datasourceType) {
167-
return repository.findSystemPredefinedDatasourceByOrgIdAndType(organizationId, datasourceType);
177+
public Mono<Datasource> findWorkspacePredefinedDatasource(String organizationId, String type) {
178+
return repository.findWorkspacePredefinedDatasourceByOrgIdAndType(organizationId, type);
168179
}
169180

170181
@Override

server/openblocks-domain/src/main/java/com/openblocks/domain/organization/service/OrganizationServiceImpl.java

Lines changed: 11 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.openblocks.domain.organization.service;
22

3-
43
import static com.openblocks.domain.organization.model.OrganizationState.ACTIVE;
54
import static com.openblocks.domain.util.QueryDslUtils.fieldName;
65
import static com.openblocks.sdk.exception.BizError.UNABLE_TO_FIND_VALID_ORG;
@@ -21,9 +20,6 @@
2120
import com.openblocks.domain.asset.model.Asset;
2221
import com.openblocks.domain.asset.service.AssetRepository;
2322
import com.openblocks.domain.asset.service.AssetService;
24-
import com.openblocks.domain.datasource.model.Datasource;
25-
import com.openblocks.domain.datasource.model.DatasourceCreationSource;
26-
import com.openblocks.domain.datasource.service.DatasourceService;
2723
import com.openblocks.domain.group.service.GroupService;
2824
import com.openblocks.domain.organization.event.OrgDeletedEvent;
2925
import com.openblocks.domain.organization.model.MemberRole;
@@ -32,7 +28,6 @@
3228
import com.openblocks.domain.organization.model.OrganizationState;
3329
import com.openblocks.domain.organization.model.QOrganization;
3430
import com.openblocks.domain.organization.repository.OrganizationRepository;
35-
import com.openblocks.domain.plugin.DatasourceMetaInfoConstants;
3631
import com.openblocks.domain.user.model.User;
3732
import com.openblocks.infra.mongo.MongoUpsertHelper;
3833
import com.openblocks.sdk.config.CommonConfig;
@@ -42,8 +37,6 @@
4237
import com.openblocks.sdk.constants.WorkspaceMode;
4338
import com.openblocks.sdk.exception.BizError;
4439
import com.openblocks.sdk.exception.BizException;
45-
import com.openblocks.sdk.plugin.openblocksapi.OpenblocksApiDatasourceConfig;
46-
import com.openblocks.sdk.plugin.restapi.RestApiDatasourceConfig;
4740

4841
import lombok.extern.slf4j.Slf4j;
4942
import reactor.core.publisher.Flux;
@@ -70,9 +63,6 @@ public class OrganizationServiceImpl implements OrganizationService {
7063
@Autowired
7164
private OrganizationRepository repository;
7265

73-
@Autowired
74-
private DatasourceService datasourceService;
75-
7666
@Autowired
7767
private GroupService groupService;
7868

@@ -103,7 +93,7 @@ public Mono<Organization> createDefault(User user) {
10393
// enterprise mode
10494
return joinOrgForEnterpriseMode(user.getId())
10595
.flatMap(join -> {
106-
if (join) {
96+
if (Boolean.TRUE.equals(join)) {
10797
return Mono.empty();
10898
}
10999
return create(organization, user.getId());
@@ -112,8 +102,14 @@ public Mono<Organization> createDefault(User user) {
112102
}
113103

114104
private Mono<Boolean> joinOrgForEnterpriseMode(String userId) {
115-
return repository.findAll()
116-
.next()
105+
return Mono.defer(() -> {
106+
String enterpriseOrgId = commonConfig.getWorkspace().getEnterpriseOrgId();
107+
if (StringUtils.isNotBlank(enterpriseOrgId)) {
108+
return repository.findById(enterpriseOrgId);
109+
}
110+
return Mono.empty();
111+
})
112+
.switchIfEmpty(repository.findAll().next())
117113
.flatMap(organization -> orgMemberService.addMember(organization.getId(), userId, MemberRole.MEMBER))
118114
.defaultIfEmpty(false);
119115
}
@@ -134,45 +130,12 @@ public Mono<Organization> create(Organization organization, String creatorId) {
134130
}
135131

136132
private Mono<Organization> onOrgCreated(String userId, Organization newOrg) {
137-
return createEmptyRestDatasource(newOrg, userId)
138-
.then(createOpenblocksApiDatasource(newOrg, userId))
139-
.then(groupService.createAllUserGroup(newOrg.getId()))
133+
return groupService.createAllUserGroup(newOrg.getId())
140134
.then(groupService.createDevGroup(newOrg.getId()))
141135
.then(setOrgAdmin(userId, newOrg))
142136
.thenReturn(newOrg);
143137
}
144138

145-
146-
private Mono<Void> createEmptyRestDatasource(Organization newOrg, String userId) {
147-
return Mono.deferContextual(contextView -> {
148-
Locale locale = getLocale(contextView);
149-
String restQueryName = getMessage(locale, "DEFAULT_REST_DATASOURCE_NAME");
150-
Datasource emptyHttpDatasource = new Datasource();
151-
emptyHttpDatasource.setName(restQueryName);
152-
emptyHttpDatasource.setType(DatasourceMetaInfoConstants.REST_API);
153-
emptyHttpDatasource.setOrganizationId(newOrg.getId());
154-
emptyHttpDatasource.setDetailConfig(RestApiDatasourceConfig.EMPTY_CONFIG);
155-
emptyHttpDatasource.setCreationSource(DatasourceCreationSource.SYSTEM_PREDEFINED.getValue());
156-
return datasourceService.create(emptyHttpDatasource, userId)
157-
.then();
158-
});
159-
}
160-
161-
private Mono<Void> createOpenblocksApiDatasource(Organization newOrg, String userId) {
162-
return Mono.deferContextual(contextView -> {
163-
String name = getMessage(getLocale(contextView), "DEFAULT_OPENBLOCKS_DATASOURCE_NAME");
164-
Datasource currentOrgDatasource = new Datasource();
165-
currentOrgDatasource.setName(name);
166-
currentOrgDatasource.setType(DatasourceMetaInfoConstants.OPENBLOCKS_API);
167-
currentOrgDatasource.setOrganizationId(newOrg.getId());
168-
169-
currentOrgDatasource.setDetailConfig(OpenblocksApiDatasourceConfig.INSTANCE);
170-
currentOrgDatasource.setCreationSource(DatasourceCreationSource.SYSTEM_PREDEFINED.getValue());
171-
return datasourceService.create(currentOrgDatasource, userId)
172-
.then();
173-
});
174-
}
175-
176139
private Mono<Boolean> setOrgAdmin(String userId, Organization newOrg) {
177140
return orgMemberService.addMember(newOrg.getId(), userId, MemberRole.ADMIN);
178141
}
@@ -248,7 +211,7 @@ public Mono<Boolean> delete(String orgId) {
248211
organization.setState(OrganizationState.DELETED);
249212
return mongoUpsertHelper.updateById(organization, orgId)
250213
.delayUntil(success -> {
251-
if (success) {
214+
if (Boolean.TRUE.equals(success)) {
252215
return sendOrgDeletedEvent(orgId);
253216
}
254217
return Mono.empty();

0 commit comments

Comments
 (0)