diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/model/Application.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/model/Application.java index b4247621e..715832b62 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/model/Application.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/model/Application.java @@ -21,10 +21,7 @@ import org.springframework.util.StringUtils; import java.time.Instant; -import java.util.Collections; -import java.util.Map; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.function.Supplier; import static com.google.common.base.Suppliers.memoize; @@ -155,7 +152,9 @@ public ApplicationQuery getQueryByViewModeAndQueryId(boolean isViewMode, String @Transient @JsonIgnore public Map getLiveApplicationDsl() { - return MapUtils.isEmpty(publishedApplicationDSL) ? editingApplicationDSL : publishedApplicationDSL; + var dsl = MapUtils.isEmpty(publishedApplicationDSL) ? editingApplicationDSL : publishedApplicationDSL; + if (dsl == null) dsl = new HashMap<>(); + return dsl; } public String getOrganizationId() { @@ -175,7 +174,9 @@ public int getApplicationType() { } public Map getEditingApplicationDSL() { - return editingApplicationDSL; + var dsl = editingApplicationDSL; + if (dsl == null) dsl = new HashMap<>(); + return dsl; } public Object getLiveContainerSize() { diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java index c6e757c13..1953acbe6 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java @@ -349,10 +349,10 @@ public Flux findAll() { @Override public Mono updateLastEditedAt(String applicationId, Instant time, String visitorId) { - return repository.findById(applicationId) + return repository.findByIdIn(List.of(applicationId)) .filter(application -> application.getEditingUserId().equals(visitorId)) .doOnNext(application -> application.setLastEditedAt(time)) .flatMap(repository::save) - .hasElement(); + .hasElements(); } } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java index 17f3aedec..db3e9171f 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java @@ -556,6 +556,8 @@ private ApplicationInfoView buildView(Application application, String role, @Nul .publicToMarketplace(application.isPublicToMarketplace()) .agencyProfile(application.agencyProfile()) .editingUserId(application.getEditingUserId()) + .lastModifyTime(application.getUpdatedAt()) + .lastEditedAt(application.getLastEditedAt()) .build(); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/view/ApplicationInfoView.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/view/ApplicationInfoView.java index cd306736a..e4bc664a7 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/view/ApplicationInfoView.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/view/ApplicationInfoView.java @@ -33,6 +33,7 @@ public class ApplicationInfoView { @Nullable private final Instant lastViewTime; // user last visit time for this app private final Instant lastModifyTime; // app's last update time + private final Instant lastEditedAt; private final boolean publicToAll; private final boolean publicToMarketplace; @@ -48,6 +49,10 @@ public long getLastModifyTime() { return lastModifyTime == null ? 0 : lastModifyTime.toEpochMilli(); } + public long getLastEditedAt() { + return lastEditedAt == null ? 0 : lastEditedAt.toEpochMilli(); + } + /** * used by front end. * diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java index 5201d3d4b..b125f82fc 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/UserHomeApiServiceImpl.java @@ -575,6 +575,7 @@ private ApplicationInfoView buildView(Application application, ResourceRole maxR .applicationStatus(application.getApplicationStatus()) .lastModifyTime(application.getUpdatedAt()) .lastViewTime(lastViewTime) + .lastEditedAt(application.getLastEditedAt()) .publicToAll(application.isPublicToAll()) .publicToMarketplace(application.isPublicToMarketplace()) .agencyProfile(application.agencyProfile());