Skip to content

Commit 04f7bdb

Browse files
Thomasrludomikula
Thomasr
authored andcommitted
Add editingUserId to application, overwrite when expired
1 parent 67ca218 commit 04f7bdb

File tree

5 files changed

+35
-15
lines changed

5 files changed

+35
-15
lines changed

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/model/Application.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ public class Application extends HasIdAndAuditing {
5252
private Boolean publicToMarketplace;
5353
@Setter
5454
private Boolean agencyProfile;
55+
@Getter
56+
@Setter
57+
private String editingUserId;
5558

5659
public Application(
5760
@JsonProperty("orgId") String organizationId,
@@ -63,7 +66,8 @@ public Application(
6366
@JsonProperty("editingApplicationDSL") Map<String, Object> editingApplicationDSL,
6467
@JsonProperty("publicToAll") Boolean publicToAll,
6568
@JsonProperty("publicToMarketplace") Boolean publicToMarketplace,
66-
@JsonProperty("agencyProfile") Boolean agencyProfile
69+
@JsonProperty("agencyProfile") Boolean agencyProfile,
70+
@JsonProperty("editingUserId") String editingUserId
6771
) {
6872
this.gid = gid;
6973
this.organizationId = organizationId;
@@ -75,6 +79,7 @@ public Application(
7579
this.publicToMarketplace = publicToMarketplace;
7680
this.agencyProfile = agencyProfile;
7781
this.editingApplicationDSL = editingApplicationDSL;
82+
this.editingUserId = editingUserId;
7883
}
7984

8085
@Transient

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ public interface ApplicationHistorySnapshotService {
1818

1919
Mono<ApplicationHistorySnapshot> getHistorySnapshotDetail(String historySnapshotId);
2020

21+
Mono<ApplicationHistorySnapshot> getLastSnapshotByApp(String applicationId);
2122
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/impl/ApplicationHistorySnapshotServiceImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,9 @@ public Mono<ApplicationHistorySnapshot> getHistorySnapshotDetail(String historyS
5757
return repository.findById(historySnapshotId)
5858
.switchIfEmpty(deferredError(INVALID_HISTORY_SNAPSHOT, "INVALID_HISTORY_SNAPSHOT", historySnapshotId));
5959
}
60+
61+
@Override
62+
public Mono<ApplicationHistorySnapshot> getLastSnapshotByApp(String applicationId) {
63+
return repository.findAllByApplicationId(applicationId, PageRequest.of(0, 1).withSort(Direction.DESC, "createdAt")).last();
64+
}
6065
}

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

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@
2121
import org.lowcoder.api.permission.PermissionHelper;
2222
import org.lowcoder.api.permission.view.PermissionItemView;
2323
import org.lowcoder.api.usermanagement.OrgDevChecker;
24-
import org.lowcoder.domain.application.model.Application;
25-
import org.lowcoder.domain.application.model.ApplicationRequestType;
26-
import org.lowcoder.domain.application.model.ApplicationStatus;
27-
import org.lowcoder.domain.application.model.ApplicationType;
24+
import org.lowcoder.domain.application.model.*;
25+
import org.lowcoder.domain.application.service.ApplicationHistorySnapshotService;
2826
import org.lowcoder.domain.application.service.ApplicationService;
2927
import org.lowcoder.domain.datasource.model.Datasource;
3028
import org.lowcoder.domain.datasource.service.DatasourceService;
@@ -45,7 +43,6 @@
4543
import org.lowcoder.sdk.exception.BizException;
4644
import org.lowcoder.sdk.plugin.common.QueryExecutor;
4745
import org.lowcoder.sdk.util.ExceptionUtils;
48-
import org.springframework.context.annotation.Lazy;
4946
import org.springframework.http.HttpHeaders;
5047
import org.springframework.stereotype.Service;
5148
import reactor.core.publisher.Flux;
@@ -58,7 +55,6 @@
5855
import java.util.List;
5956
import java.util.Map;
6057
import java.util.Set;
61-
import java.util.concurrent.TimeUnit;
6258
import java.util.stream.Collectors;
6359

6460
import static org.lowcoder.domain.application.model.ApplicationStatus.NORMAL;
@@ -94,6 +90,7 @@ public class ApplicationApiServiceImpl implements ApplicationApiService {
9490
private final TemplateService templateService;
9591
private final PermissionHelper permissionHelper;
9692
private final DatasourceService datasourceService;
93+
private final ApplicationHistorySnapshotService applicationHistorySnapshotService;
9794

9895
@Override
9996
public Mono<ApplicationView> create(CreateApplicationRequest createApplicationRequest) {
@@ -105,7 +102,7 @@ public Mono<ApplicationView> create(CreateApplicationRequest createApplicationRe
105102
NORMAL,
106103
createApplicationRequest.publishedApplicationDSL(),
107104
createApplicationRequest.editingApplicationDSL(),
108-
false, false, false);
105+
false, false, false, "");
109106

110107
if (StringUtils.isBlank(application.getOrganizationId())) {
111108
return deferredError(INVALID_PARAMETER, "ORG_ID_EMPTY");
@@ -259,19 +256,28 @@ public Mono<ApplicationView> getEditingApplication(String applicationId) {
259256
.delayUntil(application -> checkApplicationStatus(application, NORMAL)))
260257
.zipWhen(tuple -> applicationService.getAllDependentModulesFromApplication(tuple.getT2(), false), TupleUtils::merge)
261258
.zipWhen(tuple -> organizationService.getOrgCommonSettings(tuple.getT2().getOrganizationId()), TupleUtils::merge)
262-
.map(tuple -> {
263-
ResourcePermission permission = tuple.getT1();
264-
Application application = tuple.getT2();
265-
List<Application> dependentModules = tuple.getT3();
266-
Map<String, Object> commonSettings = tuple.getT4();
259+
.zipWhen(tuple -> sessionUserService.getVisitorId().zipWith(applicationHistorySnapshotService.getLastSnapshotByApp(applicationId)))
260+
.flatMap(tuple -> {
261+
ResourcePermission permission = tuple.getT1().getT1();
262+
Application application = tuple.getT1().getT2();
263+
List<Application> dependentModules = tuple.getT1().getT3();
264+
Map<String, Object> commonSettings = tuple.getT1().getT4();
265+
String visitorId = tuple.getT2().getT1();
266+
ApplicationHistorySnapshot lastSnapshot = tuple.getT2().getT2();
267+
268+
if(!visitorId.equals(application.getEditingUserId()) && lastSnapshot.getCreatedAt().compareTo(Instant.now().minusSeconds(300)) < 0) {
269+
application.setEditingUserId(visitorId);
270+
}
271+
267272
Map<String, Map<String, Object>> dependentModuleDsl = dependentModules.stream()
268273
.collect(Collectors.toMap(Application::getId, Application::getLiveApplicationDsl, (a, b) -> b));
269-
return ApplicationView.builder()
274+
return applicationService.updateById(applicationId, application).map(__ ->
275+
ApplicationView.builder()
270276
.applicationInfoView(buildView(application, permission.getResourceRole().getValue()))
271277
.applicationDSL(application.getEditingApplicationDSL())
272278
.moduleDSL(dependentModuleDsl)
273279
.orgCommonSettings(commonSettings)
274-
.build();
280+
.build());
275281
});
276282
}
277283

@@ -540,6 +546,7 @@ private ApplicationInfoView buildView(Application application, String role, @Nul
540546
.publicToAll(application.isPublicToAll())
541547
.publicToMarketplace(application.isPublicToMarketplace())
542548
.agencyProfile(application.agencyProfile())
549+
.editingUserId(application.getEditingUserId())
543550
.build();
544551
}
545552

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public class ApplicationInfoView {
3838
private final boolean publicToMarketplace;
3939
private final boolean agencyProfile;
4040

41+
private final String editingUserId;
42+
4143
public long getLastViewTime() {
4244
return lastViewTime == null ? 0 : lastViewTime.toEpochMilli();
4345
}

0 commit comments

Comments
 (0)