|
1 | 1 | package org.lowcoder.api.application;
|
2 | 2 |
|
3 |
| -import com.github.f4b6a3.uuid.UuidCreator; |
4 |
| -import com.google.common.collect.Maps; |
5 |
| -import com.google.common.collect.Sets; |
6 |
| -import jakarta.annotation.Nonnull; |
7 |
| -import jakarta.annotation.Nullable; |
8 |
| -import lombok.RequiredArgsConstructor; |
9 |
| -import lombok.extern.slf4j.Slf4j; |
| 3 | +import static org.lowcoder.domain.application.model.ApplicationStatus.NORMAL; |
| 4 | +import static org.lowcoder.domain.permission.model.ResourceAction.EDIT_APPLICATIONS; |
| 5 | +import static org.lowcoder.domain.permission.model.ResourceAction.MANAGE_APPLICATIONS; |
| 6 | +import static org.lowcoder.domain.permission.model.ResourceAction.PUBLISH_APPLICATIONS; |
| 7 | +import static org.lowcoder.domain.permission.model.ResourceAction.READ_APPLICATIONS; |
| 8 | +import static org.lowcoder.domain.permission.model.ResourceAction.USE_DATASOURCES; |
| 9 | +import static org.lowcoder.sdk.exception.BizError.ILLEGAL_APPLICATION_PERMISSION_ID; |
| 10 | +import static org.lowcoder.sdk.exception.BizError.INVALID_PARAMETER; |
| 11 | +import static org.lowcoder.sdk.exception.BizError.NOT_AUTHORIZED; |
| 12 | +import static org.lowcoder.sdk.exception.BizError.NO_PERMISSION_TO_REQUEST_APP; |
| 13 | +import static org.lowcoder.sdk.exception.BizError.USER_NOT_SIGNED_IN; |
| 14 | +import static org.lowcoder.sdk.util.ExceptionUtils.deferredError; |
| 15 | +import static org.lowcoder.sdk.util.ExceptionUtils.ofError; |
| 16 | +import static org.lowcoder.sdk.util.ExceptionUtils.ofErrorWithHeaders; |
| 17 | + |
| 18 | +import java.time.Duration; |
| 19 | +import java.time.Instant; |
| 20 | +import java.util.ArrayList; |
| 21 | +import java.util.HashMap; |
| 22 | +import java.util.HashSet; |
| 23 | +import java.util.List; |
| 24 | +import java.util.Map; |
| 25 | +import java.util.Set; |
| 26 | +import java.util.stream.Collectors; |
| 27 | + |
10 | 28 | import org.apache.commons.collections4.CollectionUtils;
|
11 | 29 | import org.apache.commons.collections4.SetUtils;
|
12 | 30 | import org.apache.commons.lang3.ObjectUtils;
|
|
27 | 45 | import org.lowcoder.api.usermanagement.OrgDevChecker;
|
28 | 46 | import org.lowcoder.api.usermanagement.view.GroupView;
|
29 | 47 | import org.lowcoder.api.usermanagement.view.OrgMemberListView;
|
30 |
| -import org.lowcoder.domain.application.model.*; |
| 48 | +import org.lowcoder.domain.application.model.Application; |
| 49 | +import org.lowcoder.domain.application.model.ApplicationRequestType; |
| 50 | +import org.lowcoder.domain.application.model.ApplicationStatus; |
| 51 | +import org.lowcoder.domain.application.model.ApplicationType; |
| 52 | +import org.lowcoder.domain.application.model.ApplicationVersion; |
31 | 53 | import org.lowcoder.domain.application.service.ApplicationHistorySnapshotService;
|
32 | 54 | import org.lowcoder.domain.application.service.ApplicationRecordService;
|
33 | 55 | import org.lowcoder.domain.application.service.ApplicationService;
|
34 | 56 | import org.lowcoder.domain.datasource.model.Datasource;
|
35 | 57 | import org.lowcoder.domain.datasource.service.DatasourceService;
|
36 | 58 | import org.lowcoder.domain.folder.service.FolderElementRelationService;
|
37 |
| -import org.lowcoder.domain.group.model.Group; |
38 |
| -import org.lowcoder.domain.group.model.GroupMember; |
39 | 59 | import org.lowcoder.domain.interaction.UserApplicationInteractionService;
|
40 |
| -import org.lowcoder.domain.organization.model.OrgMember; |
41 | 60 | import org.lowcoder.domain.organization.model.Organization;
|
42 | 61 | import org.lowcoder.domain.organization.service.OrgMemberService;
|
43 | 62 | import org.lowcoder.domain.organization.service.OrganizationService;
|
44 |
| -import org.lowcoder.domain.permission.model.*; |
| 63 | +import org.lowcoder.domain.permission.model.ResourceAction; |
| 64 | +import org.lowcoder.domain.permission.model.ResourceHolder; |
| 65 | +import org.lowcoder.domain.permission.model.ResourcePermission; |
| 66 | +import org.lowcoder.domain.permission.model.ResourceRole; |
| 67 | +import org.lowcoder.domain.permission.model.ResourceType; |
45 | 68 | import org.lowcoder.domain.permission.service.ResourcePermissionService;
|
46 | 69 | import org.lowcoder.domain.permission.solution.SuggestAppAdminSolutionService;
|
47 | 70 | import org.lowcoder.domain.plugin.service.DatasourceMetaInfoService;
|
|
56 | 79 | import org.lowcoder.sdk.util.ExceptionUtils;
|
57 | 80 | import org.springframework.http.HttpHeaders;
|
58 | 81 | import org.springframework.stereotype.Service;
|
59 |
| -import org.springframework.web.bind.annotation.PathVariable; |
60 | 82 |
|
| 83 | +import com.github.f4b6a3.uuid.UuidCreator; |
| 84 | +import com.google.common.collect.Maps; |
| 85 | +import com.google.common.collect.Sets; |
| 86 | + |
| 87 | +import jakarta.annotation.Nonnull; |
| 88 | +import jakarta.annotation.Nullable; |
| 89 | +import lombok.RequiredArgsConstructor; |
| 90 | +import lombok.extern.slf4j.Slf4j; |
61 | 91 | import reactor.core.publisher.Flux;
|
62 | 92 | import reactor.core.publisher.Mono;
|
63 | 93 | import reactor.core.scheduler.Schedulers;
|
64 |
| -import reactor.util.function.Tuple2; |
65 |
| - |
66 |
| -import java.time.Duration; |
67 |
| -import java.time.Instant; |
68 |
| -import java.util.*; |
69 |
| -import java.util.stream.Collectors; |
70 |
| - |
71 |
| -import static org.lowcoder.domain.application.model.ApplicationStatus.NORMAL; |
72 |
| -import static org.lowcoder.domain.permission.model.ResourceAction.*; |
73 |
| -import static org.lowcoder.sdk.exception.BizError.*; |
74 |
| -import static org.lowcoder.sdk.util.ExceptionUtils.*; |
75 | 94 |
|
76 | 95 | @RequiredArgsConstructor
|
77 | 96 | @Service
|
@@ -398,6 +417,27 @@ public Mono<ApplicationView> publish(String applicationId, ApplicationPublishReq
|
398 | 417 | .build())));
|
399 | 418 | }
|
400 | 419 |
|
| 420 | + @Override |
| 421 | + public Mono<ApplicationView> publishWithRollback(String applicationId, ApplicationPublishRequest applicationPublishRequest, Map<String, Object> rollbackDsl) { |
| 422 | + return checkApplicationStatus(applicationId, NORMAL) |
| 423 | + .then(sessionUserService.getVisitorId()) |
| 424 | + .flatMap(userId -> resourcePermissionService.checkAndReturnMaxPermission(userId, |
| 425 | + applicationId, PUBLISH_APPLICATIONS)) |
| 426 | + .delayUntil(__ -> applicationService.findById(applicationId) |
| 427 | + .map(application -> ApplicationVersion.builder() |
| 428 | + .tag(applicationPublishRequest.tag()) |
| 429 | + .commitMessage(applicationPublishRequest.commitMessage()) |
| 430 | + .applicationId(application.getId()) |
| 431 | + .applicationDSL(rollbackDsl) // Use the rollback DSL instead of current editing DSL |
| 432 | + .build()) |
| 433 | + .flatMap(applicationRecordService::insert)) |
| 434 | + .flatMap(permission -> applicationService.findById(applicationId) |
| 435 | + .flatMap(applicationUpdated -> buildView(applicationUpdated, permission.getResourceRole().getValue()).map(appInfoView -> ApplicationView.builder() |
| 436 | + .applicationInfoView(appInfoView) |
| 437 | + .applicationDSL(rollbackDsl) // Return the rollback DSL in the response |
| 438 | + .build()))); |
| 439 | + } |
| 440 | + |
401 | 441 | @Override
|
402 | 442 | public Mono<Boolean> updateEditState(String applicationId, ApplicationEndpoints.UpdateEditStateRequest updateEditStateRequest) {
|
403 | 443 | return checkApplicationStatus(applicationId, NORMAL)
|
|
0 commit comments