Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit05a1fb3

Browse files
authored
Merge pull request#1542 from lowcoder-org/feat/application_events
Added more application events
2 parents26a7749 +d80527f commit05a1fb3

File tree

3 files changed

+192
-3
lines changed

3 files changed

+192
-3
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
importlombok.Getter;
66
importlombok.experimental.SuperBuilder;
77

8+
importjava.util.Set;
9+
810
@Getter
911
@SuperBuilder
1012
publicclassApplicationCommonEventextendsAbstractEvent {
@@ -23,6 +25,13 @@ public class ApplicationCommonEvent extends AbstractEvent {
2325
privatefinalStringoldFolderId;
2426
@Nullable
2527
privatefinalStringoldFolderName;
28+
privatefinalStringpermissionId;
29+
privatefinalStringrole;
30+
privatefinalSet<String>userIds;
31+
privatefinalSet<String>groupIds;
32+
privatefinalStringshareType;
33+
privatefinalStringtag;
34+
privatefinalStringcommitMessage;
2635

2736
@Override
2837
publicEventTypegetEventType() {

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
importorg.lowcoder.api.application.view.*;
55
importorg.lowcoder.api.framework.view.PageResponseView;
66
importorg.lowcoder.api.framework.view.ResponseView;
7-
importorg.lowcoder.api.home.SessionUserService;
87
importorg.lowcoder.api.home.UserHomeApiService;
98
importorg.lowcoder.api.home.UserHomepageView;
109
importorg.lowcoder.api.util.BusinessEventPublisher;
@@ -14,7 +13,6 @@
1413
importorg.lowcoder.domain.application.model.ApplicationStatus;
1514
importorg.lowcoder.domain.application.model.ApplicationType;
1615
importorg.lowcoder.domain.application.service.ApplicationRecordService;
17-
importorg.lowcoder.domain.folder.service.FolderElementRelationService;
1816
importorg.lowcoder.domain.permission.model.ResourceRole;
1917
importorg.springframework.web.bind.annotation.PathVariable;
2018
importorg.springframework.web.bind.annotation.RequestBody;
@@ -37,7 +35,6 @@ public class ApplicationController implements ApplicationEndpoints {
3735
privatefinalUserHomeApiServiceuserHomeApiService;
3836
privatefinalApplicationApiServiceapplicationApiService;
3937
privatefinalBusinessEventPublisherbusinessEventPublisher;
40-
privatefinalSessionUserServicesessionUserService;
4138
privatefinalGidServicegidService;
4239
privatefinalApplicationRecordServiceapplicationRecordService;
4340

@@ -152,6 +149,14 @@ public Mono<ResponseView<ApplicationView>> publish(@PathVariable String applicat
152149
returnnewtag;
153150
})
154151
.switchIfEmpty(Mono.just("1.0.0"))
152+
.delayUntil(newtag -> {
153+
ApplicationPublishRequestreq =Objects.requireNonNullElse(applicationPublishRequest,newApplicationPublishRequest("",newtag));
154+
returnbusinessEventPublisher.publishApplicationPublishEvent(appId,req).then(Mono.defer(() -> {
155+
if(newtag.equals(req.tag())) {
156+
returnbusinessEventPublisher.publishApplicationVersionChangeEvent(appId,newtag);
157+
}elsereturnMono.empty();
158+
}));
159+
})
155160
.flatMap(newtag ->applicationApiService.publish(appId,Objects.requireNonNullElse(applicationPublishRequest,newApplicationPublishRequest("",newtag))))
156161
.map(ResponseView::success));
157162
}
@@ -221,6 +226,7 @@ public Mono<ResponseView<Boolean>> updatePermission(@PathVariable String applica
221226
}
222227
returngidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
223228
applicationApiService.updatePermission(appId,permissionId,role)
229+
.delayUntil(__ ->businessEventPublisher.publishApplicationPermissionEvent(applicationId,null,null,permissionId,role.getValue()))
224230
.map(ResponseView::success));
225231
}
226232

@@ -230,6 +236,7 @@ public Mono<ResponseView<Boolean>> removePermission(
230236
@PathVariableStringpermissionId) {
231237
returngidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
232238
applicationApiService.removePermission(appId,permissionId)
239+
.delayUntil(__ ->businessEventPublisher.publishApplicationPermissionEvent(applicationId,null,null,permissionId,null))
233240
.map(ResponseView::success));
234241
}
235242

@@ -246,6 +253,7 @@ public Mono<ResponseView<Boolean>> grantPermission(
246253
emptyIfNull(request.userIds()),
247254
emptyIfNull(request.groupIds()),
248255
role)
256+
.delayUntil(__ ->businessEventPublisher.publishApplicationPermissionEvent(applicationId,emptyIfNull(request.userIds()),emptyIfNull(request.groupIds()),null,role.getValue()))
249257
.map(ResponseView::success));
250258
}
251259

@@ -262,6 +270,7 @@ public Mono<ResponseView<Boolean>> setApplicationPublicToAll(@PathVariable Strin
262270
@RequestBodyApplicationPublicToAllRequestrequest) {
263271
returngidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
264272
applicationApiService.setApplicationPublicToAll(appId,request.publicToAll())
273+
.delayUntil(__ ->businessEventPublisher.publishApplicationSharingEvent(applicationId,"PublicToAll"))
265274
.map(ResponseView::success));
266275
}
267276

@@ -270,6 +279,7 @@ public Mono<ResponseView<Boolean>> setApplicationPublicToMarketplace(@PathVariab
270279
@RequestBodyApplicationPublicToMarketplaceRequestrequest) {
271280
returngidService.convertApplicationIdToObjectId(applicationId).flatMap(appId ->
272281
applicationApiService.setApplicationPublicToMarketplace(appId,request)
282+
.delayUntil(__ ->businessEventPublisher.publishApplicationSharingEvent(applicationId,"PublicToMarketplace"))
273283
.map(ResponseView::success));
274284
}
275285

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

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
importorg.apache.commons.lang3.StringUtils;
88
importorg.apache.commons.lang3.tuple.Pair;
99
importorg.lowcoder.api.application.view.ApplicationInfoView;
10+
importorg.lowcoder.api.application.view.ApplicationPublishRequest;
1011
importorg.lowcoder.api.application.view.ApplicationView;
1112
importorg.lowcoder.api.home.SessionUserService;
1213
importorg.lowcoder.api.usermanagement.view.AddMemberRequest;
1314
importorg.lowcoder.api.usermanagement.view.UpdateRoleRequest;
15+
importorg.lowcoder.domain.application.model.Application;
1416
importorg.lowcoder.domain.application.service.ApplicationRecordServiceImpl;
1517
importorg.lowcoder.domain.application.service.ApplicationService;
1618
importorg.lowcoder.domain.datasource.model.Datasource;
@@ -186,6 +188,174 @@ public Mono<Void> publishApplicationCommonEvent(ApplicationView applicationView,
186188
});
187189
}
188190

191+
publicMono<Void>publishApplicationPermissionEvent(StringapplicationId,Set<String>userIds,Set<String>groupIds,StringpermissionId,Stringrole) {
192+
returnsessionUserService.isAnonymousUser()
193+
.flatMap(anonymous -> {
194+
if (anonymous) {
195+
returnMono.empty();
196+
}
197+
returnsessionUserService.getVisitorOrgMemberCache()
198+
.zipWith(sessionUserService.getVisitorToken())
199+
.zipWith(Mono.defer(() ->applicationService.findById(applicationId)
200+
.zipWhen(application ->application.getCategory(applicationRecordServiceImpl))
201+
.zipWhen(application ->application.getT1().getDescription(applicationRecordServiceImpl))))
202+
.doOnNext(tuple -> {
203+
OrgMemberorgMember =tuple.getT1().getT1();
204+
Stringtoken =tuple.getT1().getT2();
205+
Stringcategory =tuple.getT2().getT1().getT2();
206+
Stringdescription =tuple.getT2().getT2();
207+
Applicationapplication =tuple.getT2().getT1().getT1();
208+
ApplicationCommonEventevent =ApplicationCommonEvent.builder()
209+
.orgId(orgMember.getOrgId())
210+
.userId(orgMember.getUserId())
211+
.applicationId(application.getId())
212+
.applicationGid(application.getGid())
213+
.applicationName(application.getName())
214+
.applicationCategory(category)
215+
.applicationDescription(description)
216+
.type(EventType.APPLICATION_PERMISSION_CHANGE)
217+
.permissionId(permissionId)
218+
.role(role)
219+
.userIds(userIds)
220+
.groupIds(groupIds)
221+
.isAnonymous(anonymous)
222+
.sessionHash(Hashing.sha512().hashString(token,StandardCharsets.UTF_8).toString())
223+
.build();
224+
event.populateDetails();
225+
applicationEventPublisher.publishEvent(event);
226+
})
227+
.then()
228+
.onErrorResume(throwable -> {
229+
log.error("publishApplicationPermissionEvent error. {}, {}, {}",applicationId,permissionId,role,throwable);
230+
returnMono.empty();
231+
});
232+
});
233+
}
234+
235+
publicMono<Void>publishApplicationSharingEvent(StringapplicationId,StringshareType) {
236+
returnsessionUserService.isAnonymousUser()
237+
.flatMap(anonymous -> {
238+
if (anonymous) {
239+
returnMono.empty();
240+
}
241+
returnsessionUserService.getVisitorOrgMemberCache()
242+
.zipWith(sessionUserService.getVisitorToken())
243+
.zipWith(Mono.defer(() ->applicationService.findById(applicationId)
244+
.zipWhen(application ->application.getCategory(applicationRecordServiceImpl))
245+
.zipWhen(application ->application.getT1().getDescription(applicationRecordServiceImpl))))
246+
.doOnNext(tuple -> {
247+
OrgMemberorgMember =tuple.getT1().getT1();
248+
Stringtoken =tuple.getT1().getT2();
249+
Stringcategory =tuple.getT2().getT1().getT2();
250+
Stringdescription =tuple.getT2().getT2();
251+
Applicationapplication =tuple.getT2().getT1().getT1();
252+
ApplicationCommonEventevent =ApplicationCommonEvent.builder()
253+
.orgId(orgMember.getOrgId())
254+
.userId(orgMember.getUserId())
255+
.applicationId(application.getId())
256+
.applicationGid(application.getGid())
257+
.applicationName(application.getName())
258+
.applicationCategory(category)
259+
.applicationDescription(description)
260+
.type(EventType.APPLICATION_SHARING_CHANGE)
261+
.shareType(shareType)
262+
.isAnonymous(anonymous)
263+
.sessionHash(Hashing.sha512().hashString(token,StandardCharsets.UTF_8).toString())
264+
.build();
265+
event.populateDetails();
266+
applicationEventPublisher.publishEvent(event);
267+
})
268+
.then()
269+
.onErrorResume(throwable -> {
270+
log.error("publishApplicationSharingEvent error. {}, {}",applicationId,shareType,throwable);
271+
returnMono.empty();
272+
});
273+
});
274+
}
275+
276+
publicMono<Void>publishApplicationPublishEvent(StringapplicationId,ApplicationPublishRequestrequest) {
277+
returnsessionUserService.isAnonymousUser()
278+
.flatMap(anonymous -> {
279+
if (anonymous) {
280+
returnMono.empty();
281+
}
282+
returnsessionUserService.getVisitorOrgMemberCache()
283+
.zipWith(sessionUserService.getVisitorToken())
284+
.zipWith(Mono.defer(() ->applicationService.findById(applicationId)
285+
.zipWhen(application ->application.getCategory(applicationRecordServiceImpl))
286+
.zipWhen(application ->application.getT1().getDescription(applicationRecordServiceImpl))))
287+
.doOnNext(tuple -> {
288+
OrgMemberorgMember =tuple.getT1().getT1();
289+
Stringtoken =tuple.getT1().getT2();
290+
Stringcategory =tuple.getT2().getT1().getT2();
291+
Stringdescription =tuple.getT2().getT2();
292+
Applicationapplication =tuple.getT2().getT1().getT1();
293+
ApplicationCommonEventevent =ApplicationCommonEvent.builder()
294+
.orgId(orgMember.getOrgId())
295+
.userId(orgMember.getUserId())
296+
.applicationId(application.getId())
297+
.applicationGid(application.getGid())
298+
.applicationName(application.getName())
299+
.applicationCategory(category)
300+
.applicationDescription(description)
301+
.type(EventType.APPLICATION_SHARING_CHANGE)
302+
.commitMessage(request.commitMessage())
303+
.tag(request.tag())
304+
.isAnonymous(anonymous)
305+
.sessionHash(Hashing.sha512().hashString(token,StandardCharsets.UTF_8).toString())
306+
.build();
307+
event.populateDetails();
308+
applicationEventPublisher.publishEvent(event);
309+
})
310+
.then()
311+
.onErrorResume(throwable -> {
312+
log.error("publishApplicationPublishEvent error. {}, {}, {}",applicationId,request.tag(),request.commitMessage(),throwable);
313+
returnMono.empty();
314+
});
315+
});
316+
}
317+
318+
publicMono<Void>publishApplicationVersionChangeEvent(StringapplicationId,Stringnewtag) {
319+
returnsessionUserService.isAnonymousUser()
320+
.flatMap(anonymous -> {
321+
if (anonymous) {
322+
returnMono.empty();
323+
}
324+
returnsessionUserService.getVisitorOrgMemberCache()
325+
.zipWith(sessionUserService.getVisitorToken())
326+
.zipWith(Mono.defer(() ->applicationService.findById(applicationId)
327+
.zipWhen(application ->application.getCategory(applicationRecordServiceImpl))
328+
.zipWhen(application ->application.getT1().getDescription(applicationRecordServiceImpl))))
329+
.doOnNext(tuple -> {
330+
OrgMemberorgMember =tuple.getT1().getT1();
331+
Stringtoken =tuple.getT1().getT2();
332+
Stringcategory =tuple.getT2().getT1().getT2();
333+
Stringdescription =tuple.getT2().getT2();
334+
Applicationapplication =tuple.getT2().getT1().getT1();
335+
ApplicationCommonEventevent =ApplicationCommonEvent.builder()
336+
.orgId(orgMember.getOrgId())
337+
.userId(orgMember.getUserId())
338+
.applicationId(application.getId())
339+
.applicationGid(application.getGid())
340+
.applicationName(application.getName())
341+
.applicationCategory(category)
342+
.applicationDescription(description)
343+
.type(EventType.APPLICATION_SHARING_CHANGE)
344+
.tag(newtag)
345+
.isAnonymous(anonymous)
346+
.sessionHash(Hashing.sha512().hashString(token,StandardCharsets.UTF_8).toString())
347+
.build();
348+
event.populateDetails();
349+
applicationEventPublisher.publishEvent(event);
350+
})
351+
.then()
352+
.onErrorResume(throwable -> {
353+
log.error("publishApplicationPublishEvent error. {}, {}",applicationId,newtag,throwable);
354+
returnMono.empty();
355+
});
356+
});
357+
}
358+
189359
publicMono<Void>publishUserLoginEvent(Stringsource) {
190360
returnsessionUserService.getVisitorOrgMember().zipWith(sessionUserService.getVisitorToken())
191361
.doOnNext(tuple -> {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp