Skip to content

Commit abed143

Browse files
committed
1 parent 99f554c commit abed143

File tree

6 files changed

+65
-35
lines changed

6 files changed

+65
-35
lines changed

server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
package org.lowcoder.infra.birelation;
22

3-
import com.google.common.base.Preconditions;
4-
import lombok.RequiredArgsConstructor;
3+
import static com.google.common.base.Strings.nullToEmpty;
4+
import static org.apache.commons.lang3.StringUtils.isNotBlank;
5+
import static org.springframework.data.mongodb.core.query.Criteria.where;
6+
7+
import java.util.ArrayList;
8+
import java.util.Collection;
9+
import java.util.List;
10+
511
import org.lowcoder.infra.mongo.MongoUpsertHelper;
12+
import org.lowcoder.sdk.exception.BizError;
13+
import org.lowcoder.sdk.exception.BizException;
14+
import org.springframework.dao.DuplicateKeyException;
615
import org.springframework.data.domain.Pageable;
716
import org.springframework.data.mongodb.core.query.Criteria;
817
import org.springframework.data.mongodb.core.query.Query;
918
import org.springframework.stereotype.Service;
10-
import reactor.core.publisher.Flux;
11-
import reactor.core.publisher.Mono;
1219

13-
import java.util.Collection;
14-
import java.util.List;
20+
import com.google.common.base.Preconditions;
1521

16-
import static com.google.common.base.Strings.nullToEmpty;
17-
import static org.apache.commons.lang3.StringUtils.isNotBlank;
18-
import static org.springframework.data.mongodb.core.query.Criteria.where;
22+
import lombok.RequiredArgsConstructor;
23+
import reactor.core.publisher.Flux;
24+
import reactor.core.publisher.Mono;
1925

2026
@Service
2127
@RequiredArgsConstructor
@@ -36,9 +42,27 @@ public Mono<BiRelation> addBiRelation(BiRelation biRelation) {
3642

3743
@Override
3844
public Mono<List<BiRelation>> batchAddBiRelation(Collection<BiRelation> biRelations) {
39-
return Flux.fromIterable(biRelations)
40-
.flatMap(this::upsertAndReturn)
41-
.collectList();
45+
List<Mono<BiRelation>> tasks = new ArrayList<>();
46+
List<BiRelation> alreadyGranted = new ArrayList<>();
47+
48+
for (BiRelation relation : biRelations) {
49+
tasks.add(
50+
biRelationRepository.insert(relation)
51+
.onErrorResume(DuplicateKeyException.class, ex -> {
52+
alreadyGranted.add(relation);
53+
return Mono.empty();
54+
})
55+
);
56+
}
57+
58+
return Flux.merge(tasks)
59+
.collectList()
60+
.map(inserted -> {
61+
if (!alreadyGranted.isEmpty()) {
62+
throw new BizException(BizError.APPLICATION_GRANTED_PERMISSION_CONFLICT, "APPLICATION_GRANTED_PERMISSION_CONFLICT", alreadyGranted);
63+
}
64+
return inserted;
65+
});
4266
}
4367

4468
@Override
@@ -233,12 +257,4 @@ public Mono<Boolean> removeBiRelationById(String id) {
233257
.thenReturn(true)
234258
.onErrorReturn(false);
235259
}
236-
237-
private Mono<BiRelation> upsertAndReturn(BiRelation biRelation) {
238-
Criteria criteria = Criteria.where("bizType").is(biRelation.getBizType())
239-
.and("sourceId").is(biRelation.getSourceId())
240-
.and("targetId").is(biRelation.getTargetId());
241-
return mongoUpsertHelper.upsertWithAuditingParams(biRelation, criteria)
242-
.onErrorResume(ex -> Mono.empty());
243-
}
244260
}

server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/exception/BizError.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package org.lowcoder.sdk.exception;
22

3-
import lombok.Getter;
4-
53
import static org.lowcoder.sdk.exception.ErrorLogType.SIMPLE;
64
import static org.lowcoder.sdk.exception.ErrorLogType.VERBOSE;
75
import static org.lowcoder.sdk.util.EnumUtils.checkDuplicates;
86

7+
import lombok.Getter;
8+
99
@Getter
1010
public enum BizError {
1111

@@ -64,6 +64,7 @@ public enum BizError {
6464

6565
NO_PERMISSION_TO_REQUEST_APP(403, 5308),
6666
APPLICATION_AND_ORG_NOT_MATCH(400, 5309),
67+
APPLICATION_GRANTED_PERMISSION_CONFLICT(409, 5310),
6768

6869
// datasource related, code range 5500 - 5600
6970
DATASOURCE_NOT_FOUND(500, 5500),

server/api-service/lowcoder-sdk/src/main/resources/locale_de.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,4 @@ EMAIL_PROVIDER_DISABLED=E-Mail-Anbieter ist deaktiviert.
103103
SLUG_DUPLICATE_ENTRY=Slug existiert bereits.
104104
SLUG_INVALID=Slug-Format ist ungültig.
105105
FLOW_ERROR=Flow-Fehlermeldung: {0}.
106+
APPLICATION_GRANTED_PERMISSION_CONFLICT=Das Recht wurde bereits gewährt.

server/api-service/lowcoder-sdk/src/main/resources/locale_en.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,4 +286,5 @@ EMAIL_PROVIDER_DISABLED=Email provider is disabled.
286286
SLUG_DUPLICATE_ENTRY=Slug already exists
287287
SLUG_INVALID=Slug format is invalid
288288
FLOW_ERROR=Flow error message: {0}
289-
ORGANIZATION_NOT_FOUND=Organization not found.
289+
ORGANIZATION_NOT_FOUND=Organization not found.
290+
APPLICATION_GRANTED_PERMISSION_CONFLICT=Right was already granted.

server/api-service/lowcoder-sdk/src/main/resources/locale_zh.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,4 +285,5 @@ DUPLICATE_AUTH_CONFIG_ADDITION=提供商身份验证类型已添加到组织中
285285
EMAIL_PROVIDER_DISABLED=电子邮件提供商已禁用。
286286
SLUG_DUPLICATE_ENTRY=蛞蝓已经存在
287287
SLUG_INVALID=Slug 格式无效
288-
FLOW_ERROR=流程错误消息:{0}
288+
FLOW_ERROR=流程错误消息:{0}
289+
APPLICATION_GRANTED_PERMISSION_CONFLICT=权限已被提交。

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
11
package org.lowcoder.api.application;
22

3-
import lombok.RequiredArgsConstructor;
4-
import org.lowcoder.api.application.view.*;
3+
import static org.apache.commons.collections4.SetUtils.emptyIfNull;
4+
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.APPLICATION_CREATE;
5+
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.APPLICATION_DELETE;
6+
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.APPLICATION_RECYCLED;
7+
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.APPLICATION_RESTORE;
8+
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.APPLICATION_UPDATE;
9+
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.APPLICATION_VIEW;
10+
import static org.lowcoder.sdk.exception.BizError.INVALID_PARAMETER;
11+
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
12+
13+
import java.util.List;
14+
import java.util.Map;
15+
import java.util.Objects;
16+
17+
import org.lowcoder.api.application.view.ApplicationInfoView;
18+
import org.lowcoder.api.application.view.ApplicationPermissionView;
19+
import org.lowcoder.api.application.view.ApplicationPublishRequest;
20+
import org.lowcoder.api.application.view.ApplicationView;
21+
import org.lowcoder.api.application.view.MarketplaceApplicationInfoView;
522
import org.lowcoder.api.framework.view.PageResponseView;
623
import org.lowcoder.api.framework.view.ResponseView;
724
import org.lowcoder.api.home.UserHomeApiService;
@@ -18,17 +35,10 @@
1835
import org.springframework.web.bind.annotation.RequestBody;
1936
import org.springframework.web.bind.annotation.RequestParam;
2037
import org.springframework.web.bind.annotation.RestController;
21-
import reactor.core.publisher.Mono;
2238

23-
import java.util.List;
24-
import java.util.Objects;
25-
26-
import static org.apache.commons.collections4.SetUtils.emptyIfNull;
27-
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.*;
28-
import static org.lowcoder.sdk.exception.BizError.INVALID_PARAMETER;
29-
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
39+
import lombok.RequiredArgsConstructor;
3040
import reactor.core.publisher.Flux;
31-
import java.util.Map;
41+
import reactor.core.publisher.Mono;
3242

3343
@RequiredArgsConstructor
3444
@RestController

0 commit comments

Comments
 (0)