Skip to content

Commit fe89b29

Browse files
authored
Merge branch 'dev' into subscription-handling
2 parents 86757ee + 67a01ad commit fe89b29

File tree

5 files changed

+28
-7
lines changed

5 files changed

+28
-7
lines changed

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

+7-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.springframework.data.mongodb.core.mapping.Document;
2121
import org.springframework.util.StringUtils;
2222

23+
import java.time.Instant;
2324
import java.util.Collections;
2425
import java.util.Map;
2526
import java.util.Optional;
@@ -55,6 +56,9 @@ public class Application extends HasIdAndAuditing {
5556
@Getter
5657
@Setter
5758
private String editingUserId;
59+
@Getter
60+
@Setter
61+
protected Instant lastEditedAt;
5862

5963
public Application(
6064
@JsonProperty("orgId") String organizationId,
@@ -67,7 +71,8 @@ public Application(
6771
@JsonProperty("publicToAll") Boolean publicToAll,
6872
@JsonProperty("publicToMarketplace") Boolean publicToMarketplace,
6973
@JsonProperty("agencyProfile") Boolean agencyProfile,
70-
@JsonProperty("editingUserId") String editingUserId
74+
@JsonProperty("editingUserId") String editingUserId,
75+
@JsonProperty("lastEditedAt") Instant lastEditedAt
7176
) {
7277
this.gid = gid;
7378
this.organizationId = organizationId;
@@ -80,6 +85,7 @@ public Application(
8085
this.agencyProfile = agencyProfile;
8186
this.editingApplicationDSL = editingApplicationDSL;
8287
this.editingUserId = editingUserId;
88+
this.lastEditedAt = lastEditedAt;
8389
}
8490

8591
@Transient

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

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import reactor.core.publisher.Flux;
88
import reactor.core.publisher.Mono;
99

10+
import java.time.Instant;
1011
import java.util.Collection;
1112
import java.util.List;
1213
import java.util.Map;
@@ -73,4 +74,6 @@ public interface ApplicationService {
7374
Mono<Set<String>> getPublicAgencyApplicationIds(Collection<String> applicationIds);
7475

7576
Flux<Application> findAll();
77+
78+
Mono<Boolean> updateLastEditedAt(String applicationId, Instant time, String visitorId);
7679
}

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

+10
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import static org.lowcoder.domain.application.ApplicationUtil.getDependentModulesFromDsl;
55

6+
import java.time.Instant;
67
import java.util.*;
78
import java.util.stream.Collectors;
89

@@ -345,4 +346,13 @@ public Mono<Set<String>> getPublicAgencyApplicationIds(Collection<String> applic
345346
public Flux<Application> findAll() {
346347
return repository.findAll();
347348
}
349+
350+
@Override
351+
public Mono<Boolean> updateLastEditedAt(String applicationId, Instant time, String visitorId) {
352+
return repository.findById(applicationId)
353+
.filter(application -> application.getEditingUserId().equals(visitorId))
354+
.doOnNext(application -> application.setLastEditedAt(time))
355+
.flatMap(repository::save)
356+
.hasElement();
357+
}
348358
}

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public Mono<ApplicationView> create(CreateApplicationRequest createApplicationRe
102102
NORMAL,
103103
createApplicationRequest.publishedApplicationDSL(),
104104
createApplicationRequest.editingApplicationDSL(),
105-
false, false, false, "");
105+
false, false, false, "", Instant.now());
106106

107107
if (StringUtils.isBlank(application.getOrganizationId())) {
108108
return deferredError(INVALID_PARAMETER, "ORG_ID_EMPTY");
@@ -256,17 +256,17 @@ public Mono<ApplicationView> getEditingApplication(String applicationId) {
256256
.delayUntil(application -> checkApplicationStatus(application, NORMAL)))
257257
.zipWhen(tuple -> applicationService.getAllDependentModulesFromApplication(tuple.getT2(), false), TupleUtils::merge)
258258
.zipWhen(tuple -> organizationService.getOrgCommonSettings(tuple.getT2().getOrganizationId()), TupleUtils::merge)
259-
.zipWhen(tuple -> sessionUserService.getVisitorId().zipWith(applicationHistorySnapshotService.getLastSnapshotByApp(applicationId)))
259+
.zipWhen(tuple -> sessionUserService.getVisitorId())
260260
.flatMap(tuple -> {
261261
ResourcePermission permission = tuple.getT1().getT1();
262262
Application application = tuple.getT1().getT2();
263263
List<Application> dependentModules = tuple.getT1().getT3();
264264
Map<String, Object> commonSettings = tuple.getT1().getT4();
265-
String visitorId = tuple.getT2().getT1();
266-
ApplicationHistorySnapshot lastSnapshot = tuple.getT2().getT2();
265+
String visitorId = tuple.getT2();
267266

268-
if(!visitorId.equals(application.getEditingUserId()) && lastSnapshot.getCreatedAt().compareTo(Instant.now().minusSeconds(300)) < 0) {
267+
if(!visitorId.equals(application.getEditingUserId()) && (application.getLastEditedAt() == null || application.getLastEditedAt().compareTo(Instant.now().minusSeconds(300)) < 0)) {
269268
application.setEditingUserId(visitorId);
269+
application.setLastEditedAt(Instant.now());
270270
}
271271

272272
Map<String, Map<String, Object>> dependentModuleDsl = dependentModules.stream()

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.lowcoder.api.util.ViewBuilder.multiBuild;
44

5+
import java.time.Instant;
56
import java.util.List;
67
import java.util.Map;
78
import java.util.stream.Collectors;
@@ -43,11 +44,12 @@ public Mono<ResponseView<Boolean>> create(@RequestBody ApplicationHistorySnapsho
4344
return sessionUserService.getVisitorId()
4445
.delayUntil(visitor -> resourcePermissionService.checkResourcePermissionWithError(visitor, request.applicationId(),
4546
ResourceAction.EDIT_APPLICATIONS))
46-
.flatMap(visitorId -> applicationHistorySnapshotService.createHistorySnapshot(request.applicationId(),
47+
.delayUntil(visitorId -> applicationHistorySnapshotService.createHistorySnapshot(request.applicationId(),
4748
request.dsl(),
4849
request.context(),
4950
visitorId)
5051
)
52+
.flatMap(visitorId -> applicationService.updateLastEditedAt(request.applicationId(), Instant.now(), visitorId))
5153
.map(ResponseView::success);
5254
}
5355

0 commit comments

Comments
 (0)