Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3574446

Browse files
committed
1. fix: fix GUI update command execution failure in view mode
2. feat: move RestApiUriBuilder from restApiPlugin module to openblocks-sdk module and reuse it in graphqlPlugin module 3. fix: remove empty variables and url params from query for graphql
1 parent d47465b commit 3574446

File tree

46 files changed

+504
-279
lines changed

Some content is hidden

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

46 files changed

+504
-279
lines changed

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/group/service/GroupMemberServiceImpl.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,4 @@ public Mono<List<String>> getNonDynamicUserGroupIdsInOrg(String orgId, String us
9393
.collectList();
9494
}
9595

96-
9796
}

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/invitation/service/InvitationService.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import org.springframework.context.annotation.Lazy;
88
import org.springframework.stereotype.Service;
99

10-
import com.openblocks.domain.bizthreshold.AbstractBizThresholdChecker;
1110
import com.openblocks.domain.invitation.model.Invitation;
1211
import com.openblocks.domain.invitation.repository.InvitationRepository;
1312
import com.openblocks.domain.organization.model.MemberRole;
@@ -25,9 +24,6 @@ public class InvitationService {
2524
@Autowired
2625
private OrgMemberService orgMemberService;
2726

28-
@Autowired
29-
private AbstractBizThresholdChecker bizThresholdChecker;
30-
3127
@Autowired
3228
private InvitationRepository repository;
3329

@@ -40,9 +36,7 @@ public Mono<Invitation> getById(@Nonnull String invitationId) {
4036
}
4137

4238
public Mono<Boolean> inviteToOrg(String userId, String orgId) {
43-
return bizThresholdChecker.checkMaxOrgCount(userId)
44-
.then(bizThresholdChecker.checkMaxOrgMemberCount(orgId))
45-
.then(orgMemberService.addMember(orgId, userId, MemberRole.MEMBER));
39+
return orgMemberService.addMember(orgId, userId, MemberRole.MEMBER);
4640
}
4741

4842
}

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/organization/model/MemberRole.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,8 @@ public static MemberRole fromValue(String str) {
3030
return VALUE_MAP.getOrDefault(str, MEMBER);
3131
}
3232

33+
public static boolean isAdmin(String str) {
34+
return ADMIN == fromValue(str);
35+
}
36+
3337
}

server/api-service/openblocks-infra/src/main/java/com/openblocks/infra/event/EventType.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ public enum EventType {
4343
DATA_SOURCE_PERMISSION_GRANT("DATA_SOURCE_PERMISSION_GRANT"),
4444
DATA_SOURCE_PERMISSION_UPDATE("DATA_SOURCE_PERMISSION_UPDATE"),
4545
DATA_SOURCE_PERMISSION_DELETE("DATA_SOURCE_PERMISSION_DELETE"),
46+
47+
// library query
48+
LIBRARY_QUERY_CREATE("LIBRARY_QUERY_CREATE"),
49+
LIBRARY_QUERY_UPDATE("LIBRARY_QUERY_UPDATE"),
50+
LIBRARY_QUERY_DELETE("LIBRARY_QUERY_DELETE"),
51+
LIBRARY_QUERY_PUBLISH("LIBRARY_QUERY_PUBLISH"),
4652
;
4753

4854
private final String desc;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.openblocks.infra.event;
2+
3+
import lombok.Getter;
4+
import lombok.experimental.SuperBuilder;
5+
6+
@Getter
7+
@SuperBuilder
8+
public class LibraryQueryEvent extends AbstractEvent {
9+
10+
private String id;
11+
private String name;
12+
private EventType eventType;
13+
14+
@Override
15+
public EventType getEventType() {
16+
return eventType;
17+
}
18+
}

server/api-service/openblocks-plugins/graphqlPlugin/src/main/java/com/openblocks/plugin/graphql/GraphQLExecutor.java

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import java.io.IOException;
2323
import java.net.URI;
2424
import java.net.URISyntaxException;
25-
import java.net.URLEncoder;
2625
import java.nio.charset.StandardCharsets;
2726
import java.text.ParseException;
27+
import java.util.HashMap;
2828
import java.util.List;
2929
import java.util.Map;
3030
import java.util.Map.Entry;
@@ -53,7 +53,6 @@
5353
import org.springframework.web.reactive.function.client.ClientResponse;
5454
import org.springframework.web.reactive.function.client.ExchangeStrategies;
5555
import org.springframework.web.reactive.function.client.WebClient;
56-
import org.springframework.web.util.UriComponentsBuilder;
5756

5857
import com.fasterxml.jackson.core.JsonProcessingException;
5958
import com.fasterxml.jackson.databind.JsonNode;
@@ -68,6 +67,7 @@
6867
import com.openblocks.sdk.models.QueryExecutionResult;
6968
import com.openblocks.sdk.plugin.common.QueryExecutionUtils;
7069
import com.openblocks.sdk.plugin.common.QueryExecutor;
70+
import com.openblocks.sdk.plugin.common.RestApiUriBuilder;
7171
import com.openblocks.sdk.plugin.graphql.GraphQLDatasourceConfig;
7272
import com.openblocks.sdk.plugin.restapi.DataUtils;
7373
import com.openblocks.sdk.plugin.restapi.auth.AuthConfig;
@@ -140,8 +140,13 @@ public GraphQLQueryExecutionContext buildQueryExecutionContext(GraphQLDatasource
140140
List<Property> updatedQueryHeaders = renderMustacheValueInProperties(queryHeaders, requestParams);
141141
List<Property> updatedQueryBodyParams = renderMustacheValueInProperties(queryBodyParams, requestParams);
142142
var updatedVariables = JsonUtils.createObjectNode();
143-
queryConfig.getVariables().forEach(property -> updatedVariables.set(property.getKey(),
144-
MustacheHelper.renderMustacheJson(property.getValue(), requestParams)));
143+
queryConfig.getVariables().forEach(property -> {
144+
if (StringUtils.isAllBlank(property.getKey(), property.getValue())) {
145+
return;
146+
}
147+
updatedVariables.set(property.getKey(),
148+
MustacheHelper.renderMustacheJson(property.getValue(), requestParams));
149+
});
145150
String updatedQueryBody = renderMustacheString(queryBody, requestParams);
146151
String normalizedUrl = buildUrl(urlDomain, updatedQueryPath, requestParams);
147152
Map<String, String> allHeaders = buildHeaders(datasourceHeaders, updatedQueryHeaders);
@@ -239,13 +244,7 @@ private List<Property> buildBodyParams(List<Property> datasourceBodyFormData, Li
239244
@Override
240245
public Mono<QueryExecutionResult> executeQuery(Object o, GraphQLQueryExecutionContext context) {
241246
return Mono.defer(() -> {
242-
URI uri;
243-
try {
244-
uri = buildUri(context.getUrl(), context.getUrlParams(), context.isEncodeParams());
245-
} catch (URISyntaxException e) {
246-
return Mono.just(QueryExecutionResult.error(QUERY_ARGUMENT_ERROR, "QUERY_ARGUMENT_ERROR", e));
247-
}
248-
247+
URI uri = RestApiUriBuilder.buildUri(context.getUrl(), new HashMap<>(), context.getUrlParams());
249248
WebClient.Builder webClientBuilder = withSafeHost(builder());
250249

251250
Map<String, String> allHeaders = context.getHeaders();
@@ -291,24 +290,6 @@ public Mono<QueryExecutionResult> executeQuery(Object o, GraphQLQueryExecutionCo
291290
});
292291
}
293292

294-
private URI buildUri(String url, Map<String, String> urlParams, boolean encodeParams) throws URISyntaxException {
295-
String httpUrl = addHttpToUrlWhenPrefixNotPresent(url);
296-
httpUrl = httpUrl.replaceAll("(?<!http:|https:)/{2,}", "/"); // remove redundant "/"
297-
UriComponentsBuilder uriBuilder = UriComponentsBuilder.newInstance();
298-
uriBuilder.uri(new URI(httpUrl));
299-
300-
urlParams.forEach((key, value) -> {
301-
if (encodeParams) {
302-
uriBuilder.queryParam(URLEncoder.encode(key, StandardCharsets.UTF_8),
303-
URLEncoder.encode(value, StandardCharsets.UTF_8)
304-
);
305-
} else {
306-
uriBuilder.queryParam(key, value);
307-
}
308-
});
309-
return uriBuilder.build(true).toUri();
310-
}
311-
312293
private Consumer<MultiValueMap<String, String>> injectCookies(GraphQLQueryExecutionContext request) {
313294
return currentCookies -> {
314295
Set<String> forwardCookies = request.getForwardCookies();

server/api-service/openblocks-plugins/graphqlPlugin/src/main/java/com/openblocks/plugin/graphql/utils/GraphQLBodyUtils.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.HashMap;
44
import java.util.Map;
55

6+
import com.fasterxml.jackson.databind.JsonNode;
67
import com.openblocks.plugin.graphql.model.GraphQLQueryExecutionContext;
78
import com.openblocks.sdk.util.JsonUtils;
89

@@ -15,7 +16,11 @@ public class GraphQLBodyUtils {
1516
public static String convertToGraphQLBody(GraphQLQueryExecutionContext graphQLQueryExecutionContext) {
1617
Map<String, Object> map = new HashMap<>();
1718
map.put(QUERY_KEY, graphQLQueryExecutionContext.getQueryBody());
18-
map.put(VARIABLES_KEY, graphQLQueryExecutionContext.getVariablesParams());
19+
// variables
20+
JsonNode variablesParams = graphQLQueryExecutionContext.getVariablesParams();
21+
if (!variablesParams.isEmpty()) {
22+
map.put(VARIABLES_KEY, graphQLQueryExecutionContext.getVariablesParams());
23+
}
1924
return JsonUtils.toJson(map);
2025
}
2126
}

server/api-service/openblocks-plugins/restApiPlugin/pom.xml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,7 @@
7070
<version>1.5</version>
7171
</dependency>
7272

73-
<dependency>
74-
<groupId>org.apache.httpcomponents</groupId>
75-
<artifactId>httpclient</artifactId>
76-
</dependency>
73+
7774

7875
<!-- &lt;!&ndash; https://mvnrepository.com/artifact/io.github.vzhn/netty-http-authenticator &ndash;&gt;-->
7976
<!-- <dependency>-->

server/api-service/openblocks-plugins/restApiPlugin/src/main/java/com/openblocks/plugin/restapi/RestApiExecutor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,14 @@
8585
import com.openblocks.plugin.restapi.constants.ResponseDataType;
8686
import com.openblocks.plugin.restapi.helpers.AuthHelper;
8787
import com.openblocks.plugin.restapi.helpers.BufferingFilter;
88-
import com.openblocks.plugin.restapi.helpers.RestApiUriBuilder;
8988
import com.openblocks.plugin.restapi.model.RestApiQueryConfig;
9089
import com.openblocks.plugin.restapi.model.RestApiQueryExecutionContext;
9190
import com.openblocks.sdk.exception.PluginException;
9291
import com.openblocks.sdk.models.Property;
9392
import com.openblocks.sdk.models.QueryExecutionResult;
9493
import com.openblocks.sdk.models.RestBodyFormFileData;
9594
import com.openblocks.sdk.plugin.common.QueryExecutor;
95+
import com.openblocks.sdk.plugin.common.RestApiUriBuilder;
9696
import com.openblocks.sdk.plugin.restapi.DataUtils;
9797
import com.openblocks.sdk.plugin.restapi.MultipartFormData;
9898
import com.openblocks.sdk.plugin.restapi.RestApiDatasourceConfig;

server/api-service/openblocks-plugins/restApiPlugin/src/test/java/com/openblocks/plugin/restapi/RestApiEngineTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
import com.fasterxml.jackson.databind.node.ObjectNode;
2020
import com.fasterxml.jackson.databind.node.TextNode;
2121
import com.google.common.collect.ImmutableMap;
22-
import com.openblocks.plugin.restapi.helpers.RestApiUriBuilder;
2322
import com.openblocks.plugin.restapi.model.RestApiQueryExecutionContext;
2423
import com.openblocks.sdk.models.Property;
2524
import com.openblocks.sdk.models.QueryExecutionResult;
25+
import com.openblocks.sdk.plugin.common.RestApiUriBuilder;
2626
import com.openblocks.sdk.plugin.restapi.RestApiDatasourceConfig;
2727
import com.openblocks.sdk.plugin.restapi.auth.BasicAuthConfig;
2828
import com.openblocks.sdk.query.QueryExecutionContext;

server/api-service/openblocks-plugins/restApiPlugin/src/test/java/com/openblocks/plugin/restapi/RestApiUriBuilderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import org.junit.Assert;
88
import org.junit.Test;
99

10-
import com.openblocks.plugin.restapi.helpers.RestApiUriBuilder;
1110
import com.openblocks.sdk.exception.PluginException;
11+
import com.openblocks.sdk.plugin.common.RestApiUriBuilder;
1212

1313
public class RestApiUriBuilderTest {
1414

server/api-service/openblocks-sdk/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,5 +155,9 @@
155155
<groupId>io.projectreactor.netty</groupId>
156156
<artifactId>reactor-netty-http</artifactId>
157157
</dependency>
158+
<dependency>
159+
<groupId>org.apache.httpcomponents</groupId>
160+
<artifactId>httpclient</artifactId>
161+
</dependency>
158162
</dependencies>
159163
</project>

server/api-service/openblocks-sdk/src/main/java/com/openblocks/sdk/exception/BizError.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public enum BizError {
3030
EXCEED_MAX_USER_ORG_COUNT(500, 5103),
3131
EXCEED_MAX_ORG_MEMBER_COUNT(500, 5104),
3232
UNABLE_TO_FIND_VALID_ORG(500, 5105),
33+
EXCEED_MAX_DEVELOPER_COUNT(500, 5106),
3334

3435
// GROUP related, code range 5150 - 5199
3536
INVALID_GROUP_ID(500, 5150),
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.openblocks.plugin.restapi.helpers;
1+
package com.openblocks.sdk.plugin.common;
22

33
import static com.openblocks.sdk.exception.PluginCommonError.QUERY_ARGUMENT_ERROR;
44
import static com.openblocks.sdk.util.ExceptionUtils.wrapException;
@@ -30,7 +30,10 @@ public static URI buildUri(String urlPrefix, String urlSuffix, Map<String, Objec
3030
} else {
3131
url = trimmedPrefix + trimmedSuffix;
3232
}
33+
return buildUri(url, paramsMap, urlParams);
34+
}
3335

36+
public static URI buildUri(String url, Map<String, Object> paramsMap, Map<String, String> urlParams) {
3437
if (StringUtils.isEmpty(url)) {
3538
throw new PluginException(QUERY_ARGUMENT_ERROR, "REQUEST_URL_EMPTY");
3639
}
@@ -46,12 +49,16 @@ public static URI buildUri(String urlPrefix, String urlSuffix, Map<String, Objec
4649
throw wrapException(QUERY_ARGUMENT_ERROR, "INVALID_REQUEST_URL", e);
4750
}
4851

49-
urlParams.forEach(uriBuilder::addParameter);
52+
urlParams.forEach((param, value) -> {
53+
if (StringUtils.isBlank(param)) {
54+
return;
55+
}
56+
uriBuilder.addParameter(param, value);
57+
});
5058
try {
5159
return uriBuilder.build();
5260
} catch (URISyntaxException e) {
5361
throw wrapException(QUERY_ARGUMENT_ERROR, "INVALID_REQUEST_URL", e);
5462
}
5563
}
56-
5764
}

server/api-service/openblocks-sdk/src/main/java/com/openblocks/sdk/plugin/sqlcommand/GuiSqlCommand.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.apache.commons.lang3.StringUtils;
1313

1414
import com.openblocks.sdk.exception.PluginException;
15+
import com.openblocks.sdk.util.SqlGuiUtils.GuiSqlValue.EscapeSql;
1516

1617
public interface GuiSqlCommand {
1718

@@ -51,4 +52,14 @@ static boolean parseAllowMultiModify(Map<String, Object> commandDetail) {
5152
boolean isInsertCommand();
5253

5354
Set<String> extractMustacheKeys();
55+
56+
default boolean isRenderWithRawSql() {
57+
return false;
58+
}
59+
60+
default EscapeSql escapeStrFunc() {
61+
return s -> {
62+
throw new UnsupportedOperationException("This func should be implemented by each SQL dialect if needed");
63+
};
64+
}
5465
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.openblocks.sdk.plugin.sqlcommand.changeset;
22

3-
import com.openblocks.sdk.util.SqlGuiUtils.PsBindValue;
3+
import com.openblocks.sdk.util.SqlGuiUtils.GuiSqlValue;
44

5-
public record ChangeSetItem(String column, PsBindValue psBindValue) {
5+
public record ChangeSetItem(String column, GuiSqlValue guiSqlValue) {
66
}

server/api-service/openblocks-sdk/src/main/java/com/openblocks/sdk/plugin/sqlcommand/changeset/ChangeSetRow.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import com.fasterxml.jackson.databind.node.ObjectNode;
1818
import com.google.common.collect.Streams;
1919
import com.openblocks.sdk.exception.PluginException;
20-
import com.openblocks.sdk.util.SqlGuiUtils.PsBindValue;
20+
import com.openblocks.sdk.util.SqlGuiUtils.GuiSqlValue;
2121

2222
@SuppressWarnings("UnstableApiUsage")
2323
public class ChangeSetRow implements Iterable<ChangeSetItem> {
@@ -42,7 +42,7 @@ private static List<ChangeSetItem> parseChangeSetItems(JsonNode node) {
4242
.map(next -> {
4343
String column = next.getKey();
4444
JsonNode value = next.getValue();
45-
return new ChangeSetItem(column, PsBindValue.fromJsonNode(value));
45+
return new ChangeSetItem(column, GuiSqlValue.fromJsonNode(value));
4646
})
4747
.toList();
4848
}

server/api-service/openblocks-sdk/src/main/java/com/openblocks/sdk/plugin/sqlcommand/changeset/KeyValuePairChangeSet.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import com.openblocks.sdk.exception.PluginException;
2121
import com.openblocks.sdk.util.MustacheHelper;
2222
import com.openblocks.sdk.util.SqlGuiUtils;
23-
import com.openblocks.sdk.util.SqlGuiUtils.PsBindValue;
23+
import com.openblocks.sdk.util.SqlGuiUtils.GuiSqlValue;
2424

2525
import lombok.extern.slf4j.Slf4j;
2626

@@ -72,8 +72,8 @@ public ChangeSetRow render(Map<String, Object> requestMap) {
7272
for (var entry : columnValueMap.entrySet()) {
7373
String column = entry.getKey();
7474
Object value = entry.getValue();
75-
PsBindValue psBindValue = SqlGuiUtils.renderPsBindValue(value, requestMap);
76-
result.add(new ChangeSetItem(column, psBindValue));
75+
GuiSqlValue guiSqlValue = SqlGuiUtils.renderPsBindValue(value, requestMap);
76+
result.add(new ChangeSetItem(column, guiSqlValue));
7777
}
7878
return new ChangeSetRow(result);
7979
}
@@ -82,8 +82,7 @@ public ChangeSetRow render(Map<String, Object> requestMap) {
8282
public Set<String> extractMustacheKeys() {
8383
return columnValueMap.values().stream()
8484
.filter(String.class::isInstance)
85-
.map(o -> MustacheHelper.extractMustacheKeysWithCurlyBraces((String) o))
86-
.flatMap(Set::stream)
85+
.flatMap(o -> MustacheHelper.extractMustacheKeysWithCurlyBraces((String) o).stream())
8786
.collect(Collectors.toSet());
8887
}
8988
}

server/api-service/openblocks-sdk/src/main/java/com/openblocks/sdk/plugin/sqlcommand/command/BulkInsertCommand.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,22 @@ public GuiSqlCommandRenderResult render(Map<String, Object> requestMap) {
5757

5858
sb.deleteCharAt(sb.length() - 1).append(") values ");
5959

60-
for (ChangeSetRow row : insertRows) {
61-
appendQuestionMarks(sb, columns);
62-
for (String column : columns) {
63-
ChangeSetItem item = row.getItem(column);
64-
bindParams.add(item.psBindValue().getValue());
60+
if (isRenderWithRawSql()) {
61+
for (ChangeSetRow row : insertRows) {
62+
sb.append("(");
63+
for (String column : columns) {
64+
ChangeSetItem item = row.getItem(column);
65+
sb.append(item.guiSqlValue().getConcatSqlStr(escapeStrFunc())).append(",");
66+
}
67+
sb.deleteCharAt(sb.length() - 1).append("),");
68+
}
69+
} else {
70+
for (ChangeSetRow row : insertRows) {
71+
appendQuestionMarks(sb, columns);
72+
for (String column : columns) {
73+
ChangeSetItem item = row.getItem(column);
74+
bindParams.add(item.guiSqlValue().getValue());
75+
}
6576
}
6677
}
6778
sb.deleteCharAt(sb.length() - 1).append(";");

0 commit comments

Comments
 (0)