Skip to content

Commit c41c905

Browse files
committed
Use app record for published dsl
1 parent 5ec9ed7 commit c41c905

File tree

9 files changed

+150
-151
lines changed

9 files changed

+150
-151
lines changed

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

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import lombok.extern.jackson.Jacksonized;
1212
import org.apache.commons.collections4.MapUtils;
1313
import org.apache.commons.lang3.BooleanUtils;
14+
import org.lowcoder.domain.application.ApplicationUtil;
15+
import org.lowcoder.domain.application.service.ApplicationRecordService;
1416
import org.lowcoder.domain.query.model.ApplicationQuery;
1517
import org.lowcoder.sdk.exception.BizError;
1618
import org.lowcoder.sdk.exception.BizException;
@@ -19,6 +21,7 @@
1921
import org.springframework.data.annotation.Transient;
2022
import org.springframework.data.mongodb.core.mapping.Document;
2123
import org.springframework.util.StringUtils;
24+
import reactor.core.publisher.Mono;
2225

2326
import java.time.Instant;
2427
import java.util.*;
@@ -41,7 +44,6 @@ public class Application extends HasIdAndAuditing {
4144
private Integer applicationType;
4245
private ApplicationStatus applicationStatus;
4346

44-
private Map<String, Object> publishedApplicationDSL;
4547
private Map<String, Object> editingApplicationDSL;
4648

4749
@Setter
@@ -63,7 +65,6 @@ public Application(
6365
@JsonProperty("name") String name,
6466
@JsonProperty("applicationType") Integer applicationType,
6567
@JsonProperty("applicationStatus") ApplicationStatus applicationStatus,
66-
@JsonProperty("publishedApplicationDSL") Map<String, Object> publishedApplicationDSL,
6768
@JsonProperty("editingApplicationDSL") Map<String, Object> editingApplicationDSL,
6869
@JsonProperty("publicToAll") Boolean publicToAll,
6970
@JsonProperty("publicToMarketplace") Boolean publicToMarketplace,
@@ -76,7 +77,6 @@ public Application(
7677
this.name = name;
7778
this.applicationType = applicationType;
7879
this.applicationStatus = applicationStatus;
79-
this.publishedApplicationDSL = publishedApplicationDSL;
8080
this.publicToAll = publicToAll;
8181
this.publicToMarketplace = publicToMarketplace;
8282
this.agencyProfile = agencyProfile;
@@ -87,43 +87,28 @@ public Application(
8787

8888
@Transient
8989
private final Supplier<Set<ApplicationQuery>> editingQueries =
90-
memoize(() -> Optional.ofNullable(editingApplicationDSL)
90+
memoize(() -> ofNullable(editingApplicationDSL)
9191
.map(map -> map.get("queries"))
9292
.map(queries -> JsonUtils.fromJsonSet(JsonUtils.toJson(queries), ApplicationQuery.class))
9393
.orElse(Collections.emptySet()));
9494

95-
@Transient
96-
private final Supplier<Set<ApplicationQuery>> liveQueries =
97-
memoize(() -> JsonUtils.fromJsonSet(JsonUtils.toJson(getLiveApplicationDsl().get("queries")), ApplicationQuery.class));
98-
9995
@Transient
10096
private final Supplier<Set<String>> editingModules = memoize(() -> getDependentModulesFromDsl(editingApplicationDSL));
10197

102-
@Transient
103-
private final Supplier<Set<String>> liveModules = memoize(() -> getDependentModulesFromDsl(getLiveApplicationDsl()));
104-
105-
@Transient
106-
private final Supplier<Object> liveContainerSize = memoize(() -> {
107-
if (ApplicationType.APPLICATION.getValue() == getApplicationType()) {
108-
return null;
109-
}
110-
return getContainerSizeFromDSL(getLiveApplicationDsl());
111-
});
112-
11398
public Set<ApplicationQuery> getEditingQueries() {
11499
return editingQueries.get();
115100
}
116101

117-
public Set<ApplicationQuery> getLiveQueries() {
118-
return liveQueries.get();
102+
public Mono<Set<ApplicationQuery>> getLiveQueries(ApplicationRecordService applicationRecordService) {
103+
return getLiveApplicationDsl(applicationRecordService).mapNotNull(liveApplicationDSL -> JsonUtils.fromJsonSet(JsonUtils.toJson(liveApplicationDSL.get("queries")), ApplicationQuery.class));
119104
}
120105

121106
public Set<String> getEditingModules() {
122107
return editingModules.get();
123108
}
124109

125-
public Set<String> getLiveModules() {
126-
return liveModules.get();
110+
public Mono<Set<String>> getLiveModules(ApplicationRecordService applicationRecordService) {
111+
return getLiveApplicationDsl(applicationRecordService).map(ApplicationUtil::getDependentModulesFromDsl);
127112
}
128113

129114
public boolean isPublicToAll() {
@@ -138,23 +123,25 @@ public boolean agencyProfile() {
138123
return BooleanUtils.toBooleanDefaultIfNull(agencyProfile, false);
139124
}
140125

141-
public ApplicationQuery getQueryByViewModeAndQueryId(boolean isViewMode, String queryId) {
142-
return (isViewMode ? getLiveQueries() : getEditingQueries())
126+
public Mono<ApplicationQuery> getQueryByViewModeAndQueryId(boolean isViewMode, String queryId, ApplicationRecordService applicationRecordService) {
127+
return getLiveQueries(applicationRecordService).map(liveQueries -> (isViewMode ? liveQueries : getEditingQueries())
143128
.stream()
144129
.filter(query -> queryId.equals(query.getId()) || queryId.equals(query.getGid()))
145130
.findFirst()
146-
.orElseThrow(() -> new BizException(BizError.QUERY_NOT_FOUND, "LIBRARY_QUERY_NOT_FOUND"));
131+
.orElseThrow(() -> new BizException(BizError.QUERY_NOT_FOUND, "LIBRARY_QUERY_NOT_FOUND")));
147132
}
148133

149134
/**
150135
* all published dsl will be kept in a list in the future
151136
*/
152137
@Transient
153138
@JsonIgnore
154-
public Map<String, Object> getLiveApplicationDsl() {
155-
var dsl = MapUtils.isEmpty(publishedApplicationDSL) ? editingApplicationDSL : publishedApplicationDSL;
156-
if (dsl == null) dsl = new HashMap<>();
157-
return dsl;
139+
public Mono<Map<String, Object>> getLiveApplicationDsl(ApplicationRecordService applicationRecordService) {
140+
return applicationRecordService.getLatestRecordByApplicationId(this.getId()).map(applicationRecord -> {
141+
Map<String, Object> dsl = applicationRecord == null ? editingApplicationDSL : applicationRecord.getApplicationDSL();
142+
if(dsl == null) dsl = new HashMap<>();
143+
return dsl;
144+
});
158145
}
159146

160147
public String getOrganizationId() {
@@ -193,12 +180,17 @@ public String getCategory() {
193180

194181
public Map<String, Object> getEditingApplicationDSLOrNull() {return editingApplicationDSL; }
195182

196-
public Object getLiveContainerSize() {
197-
return liveContainerSize.get();
183+
public Mono<Object> getLiveContainerSize(ApplicationRecordService applicationRecordService) {
184+
return getLiveApplicationDsl(applicationRecordService).flatMap(dsl -> {
185+
if (ApplicationType.APPLICATION.getValue() == getApplicationType()) {
186+
return Mono.empty();
187+
}
188+
return Mono.just(getContainerSizeFromDSL(dsl));
189+
});
198190
}
199191

200-
public Map<String, Object> getPublishedApplicationDSL() {
201-
return publishedApplicationDSL;
192+
public Mono<Map<String, Object>> getPublishedApplicationDSL(ApplicationRecordService applicationRecordService) {
193+
return applicationRecordService.getLatestRecordByApplicationId(this.getId()).map(ApplicationRecord::getApplicationDSL);
202194
}
203195

204196
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ public interface ApplicationService {
2020

2121
Mono<Boolean> updateById(String applicationId, Application application);
2222

23-
Mono<Boolean> updatePublishedApplicationDSL(String applicationId, Map<String, Object> applicationDSL);
24-
25-
Mono<Application> publish(String applicationId);
26-
2723
Mono<Boolean> updateEditState(String applicationId, Boolean editingFinished);
2824

2925
Mono<Application> create(Application newApplication, String visitorId);

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

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import lombok.RequiredArgsConstructor;
1111
import org.apache.commons.lang3.StringUtils;
1212
import org.lowcoder.domain.application.model.Application;
13+
import org.lowcoder.domain.application.model.ApplicationRecord;
1314
import org.lowcoder.domain.application.model.ApplicationRequestType;
1415
import org.lowcoder.domain.application.model.ApplicationStatus;
1516
import org.lowcoder.domain.application.repository.ApplicationRepository;
@@ -48,7 +49,7 @@ public class ApplicationServiceImpl implements ApplicationService {
4849
private final ResourcePermissionService resourcePermissionService;
4950
private final ApplicationRepository repository;
5051
private final UserRepository userRepository;
51-
private final LibraryQueryRecordService applicationRecordService;
52+
private final ApplicationRecordService applicationRecordService;
5253

5354
@Override
5455
public Mono<Application> findById(String id) {
@@ -81,23 +82,6 @@ public Mono<Boolean> updateById(String applicationId, Application application) {
8182
return mongoUpsertHelper.updateById(application, applicationId);
8283
}
8384

84-
85-
@Override
86-
public Mono<Boolean> updatePublishedApplicationDSL(String applicationId, Map<String, Object> applicationDSL) {
87-
Application application = Application.builder().publishedApplicationDSL(applicationDSL).build();
88-
return mongoUpsertHelper.updateById(application, applicationId);
89-
}
90-
91-
@Override
92-
public Mono<Application> publish(String applicationId) {
93-
return findById(applicationId)
94-
.flatMap(newApplication -> { // copy editingApplicationDSL to publishedApplicationDSL
95-
Map<String, Object> editingApplicationDSL = newApplication.getEditingApplicationDSL();
96-
return updatePublishedApplicationDSL(applicationId, editingApplicationDSL)
97-
.thenReturn(newApplication);
98-
});
99-
}
100-
10185
@Override
10286
public Mono<Boolean> updateEditState(String applicationId, Boolean editingFinished) {
10387
return findById(applicationId)
@@ -157,8 +141,10 @@ public Mono<List<Application>> getAllDependentModulesFromApplicationId(String ap
157141

158142
@Override
159143
public Mono<List<Application>> getAllDependentModulesFromApplication(Application application, boolean viewMode) {
160-
Map<String, Object> dsl = viewMode ? application.getLiveApplicationDsl() : application.getEditingApplicationDSL();
161-
return getAllDependentModulesFromDsl(dsl);
144+
return application.getLiveApplicationDsl(applicationRecordService).flatMap(liveApplicationDsl -> {
145+
Map<String, Object> dsl = viewMode ? liveApplicationDsl : application.getEditingApplicationDSL();
146+
return getAllDependentModulesFromDsl(dsl);
147+
});
162148
}
163149

164150
@Override
@@ -173,12 +159,12 @@ public Mono<List<Application>> getAllDependentModulesFromDsl(Map<String, Object>
173159
}
174160

175161
private Flux<Application> getDependentModules(Application module, Set<String> circularDependencyCheckSet) {
176-
return Flux.fromIterable(module.getLiveModules())
162+
return module.getLiveModules(applicationRecordService).flatMapMany(modules -> Flux.fromIterable(modules)
177163
.filter(moduleId -> !circularDependencyCheckSet.contains(moduleId))
178164
.doOnNext(circularDependencyCheckSet::add)
179165
.collectList()
180166
.flatMapMany(this::findByIdIn)
181-
.onErrorContinue((e, i) -> log.warn("get dependent modules on error continue , {}", e.getMessage()));
167+
.onErrorContinue((e, i) -> log.warn("get dependent modules on error continue , {}", e.getMessage())));
182168
}
183169

184170
@Override
@@ -362,9 +348,9 @@ public Mono<Boolean> updateLastEditedAt(String applicationId, Instant time, Stri
362348

363349
@Override
364350
public Mono<Map<String, Object>> getLiveDSLByApplicationId(String applicationId) {
365-
return applicationRecordService.getLatestRecordByLibraryQueryId(applicationId)
366-
.map(LibraryQueryRecord::getLibraryQueryDSL)
351+
return applicationRecordService.getLatestRecordByApplicationId(applicationId)
352+
.map(ApplicationRecord::getApplicationDSL)
367353
.switchIfEmpty(findById(applicationId)
368-
.map(Application::getPublishedApplicationDSL));
354+
.map(Application::getEditingApplicationDSL));
369355
}
370356
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/solutions/TemplateSolutionServiceImpl.java

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.apache.commons.lang3.tuple.Pair;
88
import org.lowcoder.domain.application.model.Application;
99
import org.lowcoder.domain.application.model.ApplicationStatus;
10+
import org.lowcoder.domain.application.service.ApplicationRecordService;
1011
import org.lowcoder.domain.application.service.ApplicationService;
1112
import org.lowcoder.domain.datasource.model.Datasource;
1213
import org.lowcoder.domain.datasource.model.DatasourceCreationSource;
@@ -44,6 +45,7 @@ public class TemplateSolutionServiceImpl implements TemplateSolutionService {
4445
private final DatasourceService datasourceService;
4546
@Lazy
4647
private final ApplicationService applicationService;
48+
private final ApplicationRecordService applicationRecordService;
4749

4850
@Override
4951
public Mono<Application> createFromTemplate(String templateId, String orgId, String visitorId) {
@@ -59,20 +61,21 @@ public Mono<Application> createFromTemplate(String templateId, String orgId, Str
5961
String organizationId = tuple.getT2();
6062
Application templateApplication = tuple.getT3();
6163
List<Pair<String, String>> datasourceIdMap = tuple.getT4();
62-
String dsl = JsonUtils.toJson(templateApplication.getLiveApplicationDsl());
63-
for (Pair<String, String> stringStringPair : datasourceIdMap) {
64-
dsl = dsl.replace(stringStringPair.getLeft(), stringStringPair.getRight());
65-
}
66-
Map<String, Object> applicationDSL = JsonUtils.fromJsonMap(dsl);
67-
Application application = Application.builder()
68-
.applicationStatus(ApplicationStatus.NORMAL)
69-
.gid(UuidCreator.getTimeOrderedEpoch().toString())
70-
.organizationId(organizationId)
71-
.name(template.getName())
72-
.editingApplicationDSL(applicationDSL)
73-
.publishedApplicationDSL(applicationDSL)
74-
.build();
75-
return applicationService.create(application, visitorId);
64+
return templateApplication.getLiveApplicationDsl(applicationRecordService).flatMap(liveApplicationDsl -> {
65+
String dsl = JsonUtils.toJson(liveApplicationDsl);
66+
for (Pair<String, String> stringStringPair : datasourceIdMap) {
67+
dsl = dsl.replace(stringStringPair.getLeft(), stringStringPair.getRight());
68+
}
69+
Map<String, Object> applicationDSL = JsonUtils.fromJsonMap(dsl);
70+
Application application = Application.builder()
71+
.applicationStatus(ApplicationStatus.NORMAL)
72+
.gid(UuidCreator.getTimeOrderedEpoch().toString())
73+
.organizationId(organizationId)
74+
.name(template.getName())
75+
.editingApplicationDSL(applicationDSL)
76+
.build();
77+
return applicationService.create(application, visitorId);
78+
});
7679
});
7780
}
7881

@@ -91,17 +94,18 @@ public Mono<Set<String>> getTemplateApplicationIds(Collection<String> applicatio
9194
*/
9295
private Mono<List<Pair<String, String>>> copyDatasourceFromTemplateToCurrentOrganization(String currentOrganizationId, Application application,
9396
String visitorId) {
94-
Set<ApplicationQuery> queries = application.getLiveQueries();
95-
if (isNull(queries)) {
96-
return ofError(TEMPLATE_NOT_CORRECT, "TEMPLATE_NOT_CORRECT");
97-
}
98-
Set<String> datasourceIds = queries.stream()
99-
.map(query -> query.getBaseQuery().getDatasourceId())
100-
.collect(Collectors.toSet());
101-
return Flux.fromIterable(datasourceIds)
102-
.flatMap(datasourceId -> doCopyDatasource(currentOrganizationId, datasourceId, visitorId)
103-
.map(copiedDatasourceId -> Pair.of(datasourceId, copiedDatasourceId)))
104-
.collectList();
97+
return application.getLiveQueries(applicationRecordService).flatMap(queries -> {
98+
if (isNull(queries)) {
99+
return ofError(TEMPLATE_NOT_CORRECT, "TEMPLATE_NOT_CORRECT");
100+
}
101+
Set<String> datasourceIds = queries.stream()
102+
.map(query -> query.getBaseQuery().getDatasourceId())
103+
.collect(Collectors.toSet());
104+
return Flux.fromIterable(datasourceIds)
105+
.flatMap(datasourceId -> doCopyDatasource(currentOrganizationId, datasourceId, visitorId)
106+
.map(copiedDatasourceId -> Pair.of(datasourceId, copiedDatasourceId)))
107+
.collectList();
108+
});
105109
}
106110

107111
/**

0 commit comments

Comments
 (0)