Skip to content

Commit fbdbb54

Browse files
Thomasrludomikula
authored andcommitted
api for updating editing state
1 parent 04f7bdb commit fbdbb54

File tree

9 files changed

+59
-4
lines changed

9 files changed

+59
-4
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public interface ApplicationService {
2323

2424
Mono<Application> publish(String applicationId);
2525

26+
Mono<Boolean> updateEditState(String applicationId, Boolean editingFinished);
27+
2628
Mono<Application> create(Application newApplication, String visitorId);
2729

2830
Flux<Application> findByOrganizationIdWithDsl(String organizationId);

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,16 @@ public Mono<Application> publish(String applicationId) {
9393
});
9494
}
9595

96+
@Override
97+
public Mono<Boolean> updateEditState(String applicationId, Boolean editingFinished) {
98+
return findById(applicationId)
99+
.flatMap(newApplication -> {
100+
Application application = Application.builder().editingUserId("").build();
101+
if(editingFinished) return mongoUpsertHelper.updateById(application, applicationId);
102+
return Mono.just(true);
103+
});
104+
}
105+
96106
@Override
97107
public Mono<Application> create(Application newApplication, String visitorId) {
98108
return repository.save(newApplication)

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public interface ApplicationApiService {
3535

3636
Mono<ApplicationView> publish(String applicationId);
3737

38+
Mono<Boolean> updateEditState(String applicationId, ApplicationEndpoints.UpdateEditStateRequest updateEditStateRequest);
39+
3840
Mono<Boolean> grantPermission(String applicationId,
3941
Set<String> userIds,
4042
Set<String> groupIds, ResourceRole role);

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,15 @@ public Mono<ApplicationView> publish(String applicationId) {
371371
.build()));
372372
}
373373

374+
@Override
375+
public Mono<Boolean> updateEditState(String applicationId, ApplicationEndpoints.UpdateEditStateRequest updateEditStateRequest) {
376+
return checkApplicationStatus(applicationId, NORMAL)
377+
.then(sessionUserService.getVisitorId())
378+
.flatMap(userId -> resourcePermissionService.checkAndReturnMaxPermission(userId,
379+
applicationId, EDIT_APPLICATIONS))
380+
.flatMap(permission -> applicationService.updateEditState(applicationId, updateEditStateRequest.editingFinished()));
381+
}
382+
374383
@Override
375384
public Mono<Boolean> grantPermission(String applicationId,
376385
Set<String> userIds,

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ public Mono<ResponseView<ApplicationView>> publish(@PathVariable String applicat
142142
.map(ResponseView::success);
143143
}
144144

145+
@Override
146+
public Mono<ResponseView<Boolean>> updateEditState(@PathVariable String applicationId, @RequestBody UpdateEditStateRequest updateEditStateRequest) {
147+
String appId = gidService.convertApplicationIdToObjectId(applicationId);
148+
return applicationApiService.updateEditState(appId, updateEditStateRequest)
149+
.map(ResponseView::success);
150+
}
151+
145152
@Override
146153
public Mono<ResponseView<UserHomepageView>> getUserHomePage(@RequestParam(required = false, defaultValue = "0") int applicationType) {
147154
ApplicationType type = ApplicationType.fromValue(applicationType);

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,16 @@ public Mono<ResponseView<ApplicationView>> update(@PathVariable String applicati
137137
@PostMapping("/{applicationId}/publish")
138138
public Mono<ResponseView<ApplicationView>> publish(@PathVariable String applicationId);
139139

140+
@Operation(
141+
tags = TAG_APPLICATION_MANAGEMENT,
142+
operationId = "updateApplicationEditingState",
143+
summary = "Update Application editing state",
144+
description = "Update the editing state of a specific Lowcoder Application identified by its ID."
145+
)
146+
@PutMapping("/editState/{applicationId}")
147+
public Mono<ResponseView<Boolean>> updateEditState(@PathVariable String applicationId,
148+
@RequestBody UpdateEditStateRequest updateEditStateRequest);
149+
140150
@Operation(
141151
tags = TAG_APPLICATION_MANAGEMENT,
142152
operationId = "getUserHomepageApplication",
@@ -285,5 +295,7 @@ public record CreateApplicationRequest(@JsonProperty("orgId") String organizatio
285295
Map<String, Object> editingApplicationDSL,
286296
@Nullable String folderId) {
287297
}
298+
public record UpdateEditStateRequest(Boolean editingFinished) {
299+
}
288300

289301
}

server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceIntegrationTest.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.lowcoder.api.application;
22

33

4+
import jakarta.persistence.Tuple;
45
import lombok.extern.slf4j.Slf4j;
56
import org.junit.jupiter.api.Assertions;
67
import org.junit.jupiter.api.BeforeEach;
@@ -26,6 +27,7 @@
2627
import org.springframework.test.context.ActiveProfiles;
2728
import reactor.core.publisher.Mono;
2829
import reactor.test.StepVerifier;
30+
import reactor.util.function.Tuple2;
2931

3032
import java.util.Map;
3133
import java.util.Set;
@@ -69,7 +71,6 @@ public void testCreateApplicationSuccess() {
6971
//
7072
Mono<ApplicationView> applicationViewMono = datasourceMono.map(datasource -> new CreateApplicationRequest(
7173
"org01",
72-
"",
7374
"app05",
7475
ApplicationType.APPLICATION.getValue(),
7576
Map.of("comp", "table"),
@@ -105,7 +106,6 @@ public void testUpdateApplicationFailedDueToLackOfDatasourcePermissions() {
105106
//
106107
Mono<ApplicationView> applicationViewMono = datasourceMono.map(datasource -> new CreateApplicationRequest(
107108
"org01",
108-
"",
109109
"app03",
110110
ApplicationType.APPLICATION.getValue(),
111111
Map.of("comp", "table"),
@@ -127,4 +127,17 @@ public void testUpdateApplicationFailedDueToLackOfDatasourcePermissions() {
127127
&& bizException.getMessageKey().equals("APPLICATION_EDIT_ERROR_LACK_OF_DATASOURCE_PERMISSIONS"))
128128
.verify();
129129
}
130+
131+
@Test
132+
@WithMockUser
133+
public void testUpdateEditingStateSuccess() {
134+
Mono<ApplicationView> applicationViewMono = applicationApiService.create(new CreateApplicationRequest("org01", "app1", ApplicationType.APPLICATION.getValue(), null, null, null));
135+
Mono<ApplicationView> updateEditStateMono = applicationViewMono.delayUntil(app -> applicationApiService.updateEditState(app.getApplicationInfoView().getApplicationId(), new ApplicationEndpoints.UpdateEditStateRequest(true)));
136+
Mono<ApplicationView> app = updateEditStateMono.flatMap(applicationView -> applicationApiService.getEditingApplication(applicationView.getApplicationInfoView().getApplicationId()));
137+
StepVerifier.create(app)
138+
.assertNext(application -> {
139+
Assertions.assertEquals("", application.getApplicationInfoView().getEditingUserId());
140+
})
141+
.verifyComplete();
142+
}
130143
}

server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public void testDeleteNormalApplicationWithError() {
125125

126126
private Mono<ApplicationView> createApplication(String name, String folderId) {
127127
CreateApplicationRequest createApplicationRequest =
128-
new CreateApplicationRequest("org01", "", name, ApplicationType.APPLICATION.getValue(),
128+
new CreateApplicationRequest("org01", name, ApplicationType.APPLICATION.getValue(),
129129
Map.of("comp", "table"), Map.of("comp", "list"), folderId);
130130
return applicationApiService.create(createApplicationRequest);
131131
}

server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/common/TestRedisConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import java.util.concurrent.atomic.AtomicInteger;
1111

1212
@SuppressWarnings("UnstableApiUsage")
13-
@TestConfiguration
13+
//@TestConfiguration
1414
public class TestRedisConfiguration {
1515

1616
private static final AtomicInteger STATE = new AtomicInteger(0);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy