Skip to content

Commit 8190bea

Browse files
authored
Merge pull request #1461 from lowcoder-org/environment
Add required info into events
2 parents afa744b + a1880a2 commit 8190bea

File tree

6 files changed

+59
-13
lines changed

6 files changed

+59
-13
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public abstract class AbstractEvent implements LowcoderEvent
2424

2525
public Map<String, Object> details()
2626
{
27+
this.details.put("environmentId", environmentID);
2728
return this.details;
2829
}
2930

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,17 @@ public class ApplicationCommonEvent extends AbstractEvent {
1212
private final String applicationId;
1313
private final String applicationGid;
1414
private final String applicationName;
15+
private final String applicationCategory;
16+
private final String applicationDescription;
1517
private final EventType type;
1618
@Nullable
1719
private final String folderId;
1820
@Nullable
1921
private final String folderName;
22+
@Nullable
23+
private final String oldFolderId;
24+
@Nullable
25+
private final String oldFolderName;
2026

2127
@Override
2228
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: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
import lombok.RequiredArgsConstructor;
66
import lombok.extern.slf4j.Slf4j;
77
import org.apache.commons.lang3.StringUtils;
8+
import org.apache.commons.lang3.tuple.Pair;
89
import org.lowcoder.api.application.view.ApplicationInfoView;
910
import org.lowcoder.api.application.view.ApplicationView;
1011
import org.lowcoder.api.home.SessionUserService;
1112
import org.lowcoder.api.usermanagement.view.AddMemberRequest;
1213
import org.lowcoder.api.usermanagement.view.UpdateRoleRequest;
14+
import org.lowcoder.domain.application.service.ApplicationRecordServiceImpl;
1315
import org.lowcoder.domain.application.service.ApplicationService;
1416
import org.lowcoder.domain.datasource.model.Datasource;
1517
import org.lowcoder.domain.datasource.service.DatasourceService;
@@ -40,6 +42,7 @@
4042
import org.lowcoder.infra.event.groupmember.GroupMemberRoleUpdateEvent;
4143
import org.lowcoder.infra.event.user.UserLoginEvent;
4244
import org.lowcoder.infra.event.user.UserLogoutEvent;
45+
import org.lowcoder.infra.util.TupleUtils;
4346
import org.lowcoder.plugin.api.event.LowcoderEvent.EventType;
4447
import org.lowcoder.sdk.constants.Authentication;
4548
import org.lowcoder.sdk.util.LocaleUtils;
@@ -65,6 +68,7 @@ public class BusinessEventPublisher {
6568
private final ApplicationService applicationService;
6669
private final DatasourceService datasourceService;
6770
private final ResourcePermissionService resourcePermissionService;
71+
private final ApplicationRecordServiceImpl applicationRecordServiceImpl;
6872

6973
public Mono<Void> publishFolderCommonEvent(String folderId, String folderName, EventType eventType) {
7074

@@ -93,13 +97,14 @@ public Mono<Void> publishFolderCommonEvent(String folderId, String folderName, E
9397
});
9498
}
9599

96-
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) {
97101
return applicationService.findByIdWithoutDsl(applicationId)
98102
.map(application -> {
99103
ApplicationInfoView applicationInfoView = ApplicationInfoView.builder()
100104
.applicationId(applicationId)
101105
.name(application.getName())
102106
.folderId(folderId)
107+
.folderIdFrom(folderIdFrom)
103108
.build();
104109
return ApplicationView.builder()
105110
.applicationInfoView(applicationInfoView)
@@ -125,21 +130,48 @@ public Mono<Void> publishApplicationCommonEvent(ApplicationView applicationView,
125130
.map(Optional::of)
126131
.onErrorReturn(Optional.empty());
127132
}))
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)
128142
.zipWith(sessionUserService.getVisitorToken())
143+
.zipWith(Mono.defer(() -> {
144+
String appId = applicationView.getApplicationInfoView().getApplicationId();
145+
return applicationService.findById(appId)
146+
.zipWhen(application -> application.getCategory(applicationRecordServiceImpl))
147+
.zipWhen(application -> application.getT1().getDescription(applicationRecordServiceImpl))
148+
.map(tuple -> {
149+
String category = tuple.getT1().getT2();
150+
String description = tuple.getT2();
151+
return Pair.of(category, description);
152+
});
153+
}), TupleUtils::merge)
129154
.doOnNext(tuple -> {
130155
OrgMember orgMember = tuple.getT1().getT1();
131156
Optional<Folder> optional = tuple.getT1().getT2();
157+
Optional<Folder> optionalFrom = tuple.getT1().getT3();
132158
String token = tuple.getT2();
159+
String category = tuple.getT3().getLeft();
160+
String description = tuple.getT3().getRight();
133161
ApplicationInfoView applicationInfoView = applicationView.getApplicationInfoView();
134162
ApplicationCommonEvent event = ApplicationCommonEvent.builder()
135163
.orgId(orgMember.getOrgId())
136164
.userId(orgMember.getUserId())
137165
.applicationId(applicationInfoView.getApplicationId())
138166
.applicationGid(applicationInfoView.getApplicationGid())
139167
.applicationName(applicationInfoView.getName())
168+
.applicationCategory(category)
169+
.applicationDescription(description)
140170
.type(eventType)
141171
.folderId(optional.map(Folder::getId).orElse(null))
142172
.folderName(optional.map(Folder::getName).orElse(null))
173+
.oldFolderId(optionalFrom.map(Folder::getId).orElse(null))
174+
.oldFolderName(optionalFrom.map(Folder::getName).orElse(null))
143175
.isAnonymous(anonymous)
144176
.sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString())
145177
.build();

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy