Skip to content

Commit 077fe49

Browse files
dragonpooludomikula
authored andcommitted
Added before/after detail of app update event
1 parent 2727c64 commit 077fe49

File tree

5 files changed

+95
-60
lines changed

5 files changed

+95
-60
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ public class ApplicationCommonEvent extends AbstractEvent {
1616
private final String applicationName;
1717
private final String applicationCategory;
1818
private final String applicationDescription;
19+
private final String applicationTitle;
20+
private final String oldApplicationName;
21+
private final String oldApplicationCategory;
22+
private final String oldApplicationDescription;
23+
private final String oldApplicationTitle;
1924
private final EventType type;
2025
@Nullable
2126
private final String folderId;

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

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,11 @@ public Mono<ApplicationView> create(CreateApplicationRequest createApplicationRe
136136
.delayUntil(created -> autoGrantPermissionsByFolderDefault(created.getId(), createApplicationRequest.folderId()))
137137
.delayUntil(created -> folderApiService.move(created.getId(),
138138
createApplicationRequest.folderId()))
139-
.map(applicationCreated -> ApplicationView.builder()
140-
.applicationInfoView(buildView(applicationCreated, "", createApplicationRequest.folderId()))
139+
.flatMap(applicationCreated -> buildView(applicationCreated, "", createApplicationRequest.folderId())
140+
.map(infoViewMono -> ApplicationView.builder()
141+
.applicationInfoView(infoViewMono)
141142
.applicationDSL(applicationCreated.getEditingApplicationDSL())
142-
.build());
143+
.build()));
143144
}
144145

145146
private Mono<Void> autoGrantPermissionsByFolderDefault(String applicationId, @Nullable String folderId) {
@@ -556,7 +557,7 @@ public Mono<ResourcePermission> checkApplicationPermissionWithReadableErrorMsg(S
556557

557558

558559
private Mono<ApplicationInfoView> buildView(Application application, String role) {
559-
return Mono.just(buildView(application, role, null)).delayUntil(applicationInfoView -> {
560+
return buildView(application, role, null).delayUntil(applicationInfoView -> {
560561
String applicationId = applicationInfoView.getApplicationId();
561562
return folderElementRelationService.getByElementIds(List.of(applicationId))
562563
.doOnNext(folderElement -> {
@@ -565,25 +566,33 @@ private Mono<ApplicationInfoView> buildView(Application application, String role
565566
});
566567
}
567568

568-
private ApplicationInfoView buildView(Application application, String role, @Nullable String folderId) {
569-
return ApplicationInfoView.builder()
570-
.applicationId(application.getId())
571-
.applicationGid(application.getGid())
572-
.orgId(application.getOrganizationId())
573-
.name(application.getName())
574-
.createBy(application.getCreatedBy())
575-
.createAt(application.getCreatedAt().toEpochMilli())
576-
.role(role)
577-
.applicationType(application.getApplicationType())
578-
.applicationStatus(application.getApplicationStatus())
579-
.folderId(folderId)
580-
.publicToAll(application.isPublicToAll())
581-
.publicToMarketplace(application.isPublicToMarketplace())
582-
.agencyProfile(application.agencyProfile())
583-
.editingUserId(application.getEditingUserId())
584-
.lastModifyTime(application.getUpdatedAt())
585-
.lastEditedAt(application.getLastEditedAt())
586-
.build();
569+
private Mono<ApplicationInfoView> buildView(Application application, String role, @Nullable String folderId) {
570+
return application.getCategory(applicationRecordService)
571+
.zipWith(application.getDescription(applicationRecordService))
572+
.zipWith(application.getTitle(applicationRecordService), TupleUtils::merge)
573+
.map(tuple ->
574+
ApplicationInfoView.builder()
575+
.applicationId(application.getId())
576+
.applicationGid(application.getGid())
577+
.orgId(application.getOrganizationId())
578+
.name(application.getName())
579+
.createBy(application.getCreatedBy())
580+
.createAt(application.getCreatedAt().toEpochMilli())
581+
.role(role)
582+
.applicationType(application.getApplicationType())
583+
.applicationStatus(application.getApplicationStatus())
584+
.folderId(folderId)
585+
.publicToAll(application.isPublicToAll())
586+
.publicToMarketplace(application.isPublicToMarketplace())
587+
.agencyProfile(application.agencyProfile())
588+
.editingUserId(application.getEditingUserId())
589+
.lastModifyTime(application.getUpdatedAt())
590+
.lastEditedAt(application.getLastEditedAt())
591+
.category(tuple.getT1())
592+
.description(tuple.getT2())
593+
.title(tuple.getT3())
594+
.build()
595+
);
587596
}
588597

589598
private Mono<ApplicationInfoView> buildView(Application application) {

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

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,33 @@ public class ApplicationController implements ApplicationEndpoints {
4141
@Override
4242
public Mono<ResponseView<ApplicationView>> create(@RequestBody CreateApplicationRequest createApplicationRequest) {
4343
return applicationApiService.create(createApplicationRequest)
44-
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_CREATE))
44+
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(null, applicationView, APPLICATION_CREATE))
4545
.map(ResponseView::success);
4646
}
4747

4848
@Override
4949
public Mono<ResponseView<ApplicationView>> createFromTemplate(@RequestParam String templateId) {
5050
return applicationApiService.createFromTemplate(templateId)
51-
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_CREATE))
51+
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(null, applicationView, APPLICATION_CREATE))
5252
.map(ResponseView::success);
5353
}
5454

5555
@Override
5656
public Mono<ResponseView<Boolean>> recycle(@PathVariable String applicationId) {
5757
return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
58-
applicationApiService.recycle(appId)
59-
.delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(applicationId, null, null, APPLICATION_RECYCLED))
60-
.map(ResponseView::success));
58+
applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView ->
59+
applicationApiService.recycle(appId)
60+
.delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationId, null, null, APPLICATION_RECYCLED))
61+
.map(ResponseView::success)));
6162
}
6263

6364
@Override
6465
public Mono<ResponseView<Boolean>> restore(@PathVariable String applicationId) {
6566
return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
66-
applicationApiService.restore(appId)
67-
.delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(applicationId, null, null, APPLICATION_RESTORE))
68-
.map(ResponseView::success));
67+
applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView ->
68+
applicationApiService.restore(appId)
69+
.delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationId, null, null, APPLICATION_RESTORE))
70+
.map(ResponseView::success)));
6971
}
7072

7173
@Override
@@ -78,9 +80,10 @@ public Mono<ResponseView<List<ApplicationInfoView>>> getRecycledApplications(@Re
7880
@Override
7981
public Mono<ResponseView<ApplicationView>> delete(@PathVariable String applicationId) {
8082
return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
81-
applicationApiService.delete(appId)
82-
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_DELETE))
83-
.map(ResponseView::success));
83+
applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView ->
84+
applicationApiService.delete(appId)
85+
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationView, APPLICATION_DELETE))
86+
.map(ResponseView::success)));
8487
}
8588

8689
@Override
@@ -94,38 +97,42 @@ public Mono<ResponseView<ApplicationView>> getEditingApplication(@PathVariable S
9497
@Override
9598
public Mono<ResponseView<ApplicationView>> getPublishedApplication(@PathVariable String applicationId, @RequestParam(required = false) Boolean withDeleted) {
9699
return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
97-
applicationApiService.getPublishedApplication(appId, ApplicationRequestType.PUBLIC_TO_ALL, withDeleted)
98-
.delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId))
99-
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_VIEW))
100-
.map(ResponseView::success));
100+
applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView ->
101+
applicationApiService.getPublishedApplication(appId, ApplicationRequestType.PUBLIC_TO_ALL, withDeleted)
102+
.delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId))
103+
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationView, APPLICATION_VIEW))
104+
.map(ResponseView::success)));
101105
}
102106

103107
@Override
104108
public Mono<ResponseView<ApplicationView>> getPublishedMarketPlaceApplication(@PathVariable String applicationId) {
105109
return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
106-
applicationApiService.getPublishedApplication(appId, ApplicationRequestType.PUBLIC_TO_MARKETPLACE, false)
107-
.delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId))
108-
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_VIEW))
109-
.map(ResponseView::success));
110+
applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView ->
111+
applicationApiService.getPublishedApplication(appId, ApplicationRequestType.PUBLIC_TO_MARKETPLACE, false)
112+
.delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId))
113+
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationView, APPLICATION_VIEW))
114+
.map(ResponseView::success)));
110115
}
111116

112117
@Override
113118
public Mono<ResponseView<ApplicationView>> getAgencyProfileApplication(@PathVariable String applicationId) {
114119
return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
115-
applicationApiService.getPublishedApplication(appId, ApplicationRequestType.AGENCY_PROFILE, false)
116-
.delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId))
117-
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_VIEW))
118-
.map(ResponseView::success));
120+
applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView ->
121+
applicationApiService.getPublishedApplication(appId, ApplicationRequestType.AGENCY_PROFILE, false)
122+
.delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId))
123+
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationView, APPLICATION_VIEW))
124+
.map(ResponseView::success)));
119125
}
120126

121127
@Override
122128
public Mono<ResponseView<ApplicationView>> update(@PathVariable String applicationId,
123129
@RequestBody Application newApplication,
124130
@RequestParam(required = false) Boolean updateStatus) {
125131
return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
126-
applicationApiService.update(appId, newApplication, updateStatus)
127-
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_UPDATE))
128-
.map(ResponseView::success));
132+
applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView ->
133+
applicationApiService.update(appId, newApplication, updateStatus)
134+
.delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationView, APPLICATION_UPDATE))
135+
.map(ResponseView::success)));
129136
}
130137

131138
@Override

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

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

33
import lombok.RequiredArgsConstructor;
4+
import org.lowcoder.api.application.ApplicationApiService;
45
import org.lowcoder.api.application.view.ApplicationPermissionView;
56
import org.lowcoder.api.framework.view.PageResponseView;
67
import org.lowcoder.api.framework.view.ResponseView;
@@ -35,6 +36,7 @@ public class FolderController implements FolderEndpoints
3536
private final BusinessEventPublisher businessEventPublisher;
3637
private final GidService gidService;
3738
private final FolderElementRelationService folderElementRelationService;
39+
private final ApplicationApiService applicationApiService;
3840

3941
@Override
4042
public Mono<ResponseView<FolderInfoView>> create(@RequestBody Folder folder) {
@@ -95,9 +97,10 @@ public Mono<ResponseView<Void>> move(@PathVariable("id") String applicationLikeI
9597
@RequestParam(value = "targetFolderId", required = false) String targetFolderId) {
9698
return folderElementRelationService.getByElementIds(List.of(applicationLikeId)).next().defaultIfEmpty(new FolderElement(null, null)).flatMap(folderElement ->
9799
gidService.convertFolderIdToObjectId(targetFolderId).flatMap(objectId ->
98-
folderApiService.move(applicationLikeId, objectId.orElse(null))
99-
.then(businessEventPublisher.publishApplicationCommonEvent(applicationLikeId, folderElement.folderId(), objectId.orElse(null), APPLICATION_MOVE))
100-
.then(Mono.fromSupplier(() -> ResponseView.success(null)))));
100+
applicationApiService.getEditingApplication(applicationLikeId, true).flatMap(originalApplicationView ->
101+
folderApiService.move(applicationLikeId, objectId.orElse(null))
102+
.then(businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationLikeId, folderElement.folderId(), objectId.orElse(null), APPLICATION_MOVE))
103+
.then(Mono.fromSupplier(() -> ResponseView.success(null))))));
101104
}
102105

103106
@Override

0 commit comments

Comments
 (0)