Skip to content

Commit 8da1385

Browse files
authored
Merge pull request lowcoder-org#105 from lvhuichao/lvhuichao
Lvhuichao
2 parents 8d5e107 + cb81b14 commit 8da1385

File tree

99 files changed

+2749
-520
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+2749
-520
lines changed

deploy/docker/entrypoint.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ add_user() {
2727
echo "Starting with UID : $USER_ID"
2828
groupadd -g $GROUP_ID $GROUP_NAME || true
2929
useradd -u $USER_ID -g $GROUP_ID $USER_NAME || true
30-
chown -R $USER_ID:$GROUP_ID /openblocks /openblocks-stacks /etc/nginx /var /etc/redis /run /etc/supervisor
30+
chown -R $USER_ID:$GROUP_ID /openblocks /openblocks-stacks /etc/nginx /var /etc/redis /etc/supervisor
31+
chown $USER_ID:$GROUP_ID /run
3132
}
3233

3334
init_mongodb

server/openblocks-domain/src/main/java/com/openblocks/domain/application/model/Application.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import static com.openblocks.domain.application.ApplicationUtil.getDependentModulesFromDsl;
77
import static java.util.Optional.ofNullable;
88

9+
import java.util.Collections;
910
import java.util.Map;
11+
import java.util.Optional;
1012
import java.util.Set;
1113
import java.util.function.Supplier;
1214

@@ -41,7 +43,10 @@ public class Application extends HasIdAndAuditing {
4143

4244
@Transient
4345
private final Supplier<Set<ApplicationQuery>> editingQueries =
44-
memoize(() -> JsonUtils.fromJsonSet(JsonUtils.toJson(editingApplicationDSL.get("queries")), ApplicationQuery.class));
46+
memoize(() -> Optional.ofNullable(editingApplicationDSL)
47+
.map(map -> map.get("queries"))
48+
.map(queries -> JsonUtils.fromJsonSet(JsonUtils.toJson(queries), ApplicationQuery.class))
49+
.orElse(Collections.emptySet()));
4550

4651
@Transient
4752
private final Supplier<Set<ApplicationQuery>> liveQueries =
@@ -80,7 +85,7 @@ public Application(@JsonProperty("orgId") String organizationId,
8085
this.editingApplicationDSL = editingApplicationDSL;
8186
}
8287

83-
private Set<ApplicationQuery> getEditingQueries() {
88+
public Set<ApplicationQuery> getEditingQueries() {
8489
return editingQueries.get();
8590
}
8691

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: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,17 @@
1414
import com.openblocks.domain.plugin.service.DatasourceMetaInfoService;
1515
import com.openblocks.infra.mongo.MongoUpsertHelper;
1616
import com.openblocks.sdk.models.DatasourceConnectionConfig;
17+
import com.openblocks.sdk.util.JsonUtils;
1718

19+
import lombok.extern.slf4j.Slf4j;
1820
import reactor.core.publisher.Flux;
1921
import reactor.core.publisher.Mono;
2022

2123
/**
2224
* all find operation must do data decryption
2325
* for update operations that try to save whole datasource object, data encryption is required
2426
*/
27+
@Slf4j
2528
@Repository
2629
public class DatasourceRepository {
2730

@@ -42,9 +45,9 @@ public Mono<Datasource> findById(String datasourceId) {
4245
.map(this::convertToDomainObjectAndDecrypt);
4346
}
4447

45-
public Mono<Datasource> findSystemPredefinedDatasourceByOrgIdAndType(String organizationId, String type) {
48+
public Mono<Datasource> findWorkspacePredefinedDatasourceByOrgIdAndType(String organizationId, String type) {
4649
return repository.findByOrganizationIdAndTypeAndCreationSource(organizationId, type,
47-
DatasourceCreationSource.SYSTEM_PREDEFINED.getValue())
50+
DatasourceCreationSource.LEGACY_WORKSPACE_PREDEFINED.getValue())
4851
.map(this::convertToDomainObjectAndDecrypt);
4952
}
5053

@@ -82,9 +85,13 @@ private Datasource convertToDomainObjectAndDecrypt(DatasourceDO datasourceDO) {
8285
result.setCreatedBy(datasourceDO.getCreatedBy());
8386
result.setModifiedBy(datasourceDO.getModifiedBy());
8487

85-
DatasourceConnectionConfig detailConfig = datasourceMetaInfoService.resolveDetailConfig(datasourceDO.getDetailConfig(), result.getType());
86-
DatasourceConnectionConfig decryptedDetailConfig = detailConfig.doDecrypt(encryptionService::decryptString);
87-
result.setDetailConfig(decryptedDetailConfig);
88+
try {
89+
DatasourceConnectionConfig detailConfig = datasourceMetaInfoService.resolveDetailConfig(datasourceDO.getDetailConfig(), result.getType());
90+
DatasourceConnectionConfig decryptedDetailConfig = detailConfig.doDecrypt(encryptionService::decryptString);
91+
result.setDetailConfig(decryptedDetailConfig);
92+
} catch (Exception e) {
93+
log.error("resolve detail config error.{},{}", result.getType(), JsonUtils.toJson(datasourceDO.getDetailConfig()), e);
94+
}
8895
return result;
8996
}
9097

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package com.openblocks.domain.datasource.service;
22

3-
import java.util.List;
4-
53
import com.openblocks.domain.datasource.model.Datasource;
64
import com.openblocks.sdk.models.DatasourceTestResult;
75

6+
import reactor.core.publisher.Flux;
87
import reactor.core.publisher.Mono;
98

109
public interface DatasourceService {
@@ -19,11 +18,9 @@ public interface DatasourceService {
1918

2019
Mono<DatasourceTestResult> testDatasource(Datasource datasource);
2120

22-
Mono<List<Datasource>> getByOrgId(String orgId);
23-
24-
Mono<List<Datasource>> getByAppId(String appId);
21+
Flux<Datasource> getByOrgId(String orgId);
2522

2623
Mono<Long> countByOrganizationId(String orgId);
2724

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

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

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import static org.apache.commons.collections4.CollectionUtils.isNotEmpty;
77

88
import java.time.Duration;
9-
import java.util.List;
109
import java.util.Locale;
1110
import java.util.Set;
1211
import java.util.stream.Collectors;
@@ -21,7 +20,6 @@
2120
import com.google.common.base.Joiner;
2221
import com.openblocks.domain.application.model.ApplicationStatus;
2322
import com.openblocks.domain.application.repository.ApplicationRepository;
24-
import com.openblocks.domain.application.service.ApplicationService;
2523
import com.openblocks.domain.datasource.model.Datasource;
2624
import com.openblocks.domain.datasource.repository.DatasourceRepository;
2725
import com.openblocks.domain.datasource.service.DatasourceService;
@@ -36,13 +34,15 @@
3634
import com.openblocks.sdk.util.LocaleUtils;
3735

3836
import lombok.extern.slf4j.Slf4j;
37+
import reactor.core.publisher.Flux;
3938
import reactor.core.publisher.Mono;
4039

4140
@Slf4j
4241
@Service
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) {
@@ -153,15 +164,8 @@ private Mono<DatasourceTestResult> testDatasourceConnection(Datasource datasourc
153164
}
154165

155166
@Override
156-
public Mono<List<Datasource>> getByOrgId(String orgId) {
157-
return repository.findAllByOrganizationId(orgId)
158-
.collectList();
159-
}
160-
161-
@Override
162-
public Mono<List<Datasource>> getByAppId(String appId) {
163-
return applicationService.findByIdWithoutDsl(appId)
164-
.flatMap(application -> repository.findAllByOrganizationId(application.getOrganizationId()).collectList());
167+
public Flux<Datasource> getByOrgId(String orgId) {
168+
return repository.findAllByOrganizationId(orgId);
165169
}
166170

167171
@Override
@@ -170,8 +174,8 @@ public Mono<Long> countByOrganizationId(String orgId) {
170174
}
171175

172176
@Override
173-
public Mono<Datasource> findSystemPredefinedDatasource(String organizationId, String datasourceType) {
174-
return repository.findSystemPredefinedDatasourceByOrgIdAndType(organizationId, datasourceType);
177+
public Mono<Datasource> findWorkspacePredefinedDatasource(String organizationId, String type) {
178+
return repository.findWorkspacePredefinedDatasourceByOrgIdAndType(organizationId, type);
175179
}
176180

177181
@Override

0 commit comments

Comments
 (0)