Skip to content

Commit 507b869

Browse files
committed
Add from-folder to application related event
1 parent a88d70f commit 507b869

File tree

5 files changed

+37
-13
lines changed

5 files changed

+37
-13
lines changed

server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/ApplicationCommonEvent.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ public class ApplicationCommonEvent extends AbstractEvent {
1919
private final String folderId;
2020
@Nullable
2121
private final String folderName;
22+
@Nullable
23+
private final String oldFolderId;
24+
@Nullable
25+
private final String oldFolderName;
2226

2327
@Override
2428
public EventType getEventType() {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,15 @@ public Mono<ResponseView<ApplicationView>> createFromTemplate(@RequestParam Stri
5959
public Mono<ResponseView<Boolean>> recycle(@PathVariable String applicationId) {
6060
return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
6161
applicationApiService.recycle(appId)
62-
.delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(applicationId, null, APPLICATION_RECYCLED))
62+
.delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(applicationId, null, null, APPLICATION_RECYCLED))
6363
.map(ResponseView::success));
6464
}
6565

6666
@Override
6767
public Mono<ResponseView<Boolean>> restore(@PathVariable String applicationId) {
6868
return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
6969
applicationApiService.restore(appId)
70-
.delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(applicationId, null, APPLICATION_RESTORE))
70+
.delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(applicationId, null, null, APPLICATION_RESTORE))
7171
.map(ResponseView::success));
7272
}
7373

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ public class ApplicationInfoView {
2929
private final Object containerSize; // for module size
3030
@Nullable
3131
private String folderId;
32+
@Nullable
33+
@JsonInclude(Include.NON_NULL)
34+
private String folderIdFrom;
3235

3336
@Nullable
3437
private final Instant lastViewTime; // user last visit time for this app

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
package org.lowcoder.api.home;
22

3-
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.APPLICATION_MOVE;
4-
import static org.lowcoder.sdk.exception.BizError.INVALID_PARAMETER;
5-
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
6-
3+
import lombok.RequiredArgsConstructor;
74
import org.lowcoder.api.application.view.ApplicationPermissionView;
85
import org.lowcoder.api.framework.view.PageResponseView;
96
import org.lowcoder.api.framework.view.ResponseView;
107
import org.lowcoder.api.util.BusinessEventPublisher;
118
import org.lowcoder.api.util.GidService;
129
import org.lowcoder.domain.application.model.ApplicationType;
1310
import org.lowcoder.domain.folder.model.Folder;
11+
import org.lowcoder.domain.folder.service.FolderElementRelationService;
1412
import org.lowcoder.domain.folder.service.FolderService;
1513
import org.lowcoder.domain.permission.model.ResourceRole;
1614
import org.lowcoder.plugin.api.event.LowcoderEvent.EventType;
1715
import org.springframework.web.bind.annotation.PathVariable;
1816
import org.springframework.web.bind.annotation.RequestBody;
1917
import org.springframework.web.bind.annotation.RequestParam;
2018
import org.springframework.web.bind.annotation.RestController;
21-
22-
import lombok.RequiredArgsConstructor;
2319
import reactor.core.publisher.Mono;
2420

21+
import java.util.List;
22+
23+
import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.APPLICATION_MOVE;
24+
import static org.lowcoder.sdk.exception.BizError.INVALID_PARAMETER;
25+
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
26+
2527
@RequiredArgsConstructor
2628
@RestController
2729
public class FolderController implements FolderEndpoints
@@ -31,6 +33,7 @@ public class FolderController implements FolderEndpoints
3133
private final FolderApiService folderApiService;
3234
private final BusinessEventPublisher businessEventPublisher;
3335
private final GidService gidService;
36+
private final FolderElementRelationService folderElementRelationService;
3437

3538
@Override
3639
public Mono<ResponseView<FolderInfoView>> create(@RequestBody Folder folder) {
@@ -89,10 +92,11 @@ public Mono<PageResponseView<?>> getElements(@RequestParam(value = "id", require
8992
@Override
9093
public Mono<ResponseView<Void>> move(@PathVariable("id") String applicationLikeId,
9194
@RequestParam(value = "targetFolderId", required = false) String targetFolderId) {
92-
return gidService.convertFolderIdToObjectId(targetFolderId).flatMap(objectId ->
93-
folderApiService.move(applicationLikeId, objectId.orElse(null))
94-
.then(businessEventPublisher.publishApplicationCommonEvent(applicationLikeId, objectId.orElse(null), APPLICATION_MOVE))
95-
.then(Mono.fromSupplier(() -> ResponseView.success(null))));
95+
return folderElementRelationService.getByElementIds(List.of(applicationLikeId)).next().flatMap(folderElement ->
96+
gidService.convertFolderIdToObjectId(targetFolderId).flatMap(objectId ->
97+
folderApiService.move(applicationLikeId, objectId.orElse(null))
98+
.then(businessEventPublisher.publishApplicationCommonEvent(applicationLikeId, folderElement.folderId(), objectId.orElse(null), APPLICATION_MOVE))
99+
.then(Mono.fromSupplier(() -> ResponseView.success(null)))));
96100
}
97101

98102
@Override

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,14 @@ public Mono<Void> publishFolderCommonEvent(String folderId, String folderName, E
9797
});
9898
}
9999

100-
public Mono<Void> publishApplicationCommonEvent(String applicationId, @Nullable String folderId, EventType eventType) {
100+
public Mono<Void> publishApplicationCommonEvent(String applicationId, @Nullable String folderIdFrom, @Nullable String folderId, EventType eventType) {
101101
return applicationService.findByIdWithoutDsl(applicationId)
102102
.map(application -> {
103103
ApplicationInfoView applicationInfoView = ApplicationInfoView.builder()
104104
.applicationId(applicationId)
105105
.name(application.getName())
106106
.folderId(folderId)
107+
.folderIdFrom(folderIdFrom)
107108
.build();
108109
return ApplicationView.builder()
109110
.applicationInfoView(applicationInfoView)
@@ -129,6 +130,15 @@ public Mono<Void> publishApplicationCommonEvent(ApplicationView applicationView,
129130
.map(Optional::of)
130131
.onErrorReturn(Optional.empty());
131132
}))
133+
.zipWith(Mono.defer(() -> {
134+
String folderId = applicationView.getApplicationInfoView().getFolderIdFrom();
135+
if (StringUtils.isBlank(folderId)) {
136+
return Mono.just(Optional.<Folder> empty());
137+
}
138+
return folderService.findById(folderId)
139+
.map(Optional::of)
140+
.onErrorReturn(Optional.empty());
141+
}), TupleUtils::merge)
132142
.zipWith(sessionUserService.getVisitorToken())
133143
.zipWith(Mono.defer(() -> {
134144
String appId = applicationView.getApplicationInfoView().getApplicationId();
@@ -144,6 +154,7 @@ public Mono<Void> publishApplicationCommonEvent(ApplicationView applicationView,
144154
.doOnNext(tuple -> {
145155
OrgMember orgMember = tuple.getT1().getT1();
146156
Optional<Folder> optional = tuple.getT1().getT2();
157+
Optional<Folder> optionalFrom = tuple.getT1().getT3();
147158
String token = tuple.getT2();
148159
String category = tuple.getT3().getLeft();
149160
String description = tuple.getT3().getRight();
@@ -159,6 +170,8 @@ public Mono<Void> publishApplicationCommonEvent(ApplicationView applicationView,
159170
.type(eventType)
160171
.folderId(optional.map(Folder::getId).orElse(null))
161172
.folderName(optional.map(Folder::getName).orElse(null))
173+
.oldFolderId(optionalFrom.map(Folder::getId).orElse(null))
174+
.oldFolderName(optionalFrom.map(Folder::getName).orElse(null))
162175
.isAnonymous(anonymous)
163176
.sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString())
164177
.build();

0 commit comments

Comments
 (0)