Skip to content

Commit fbdbb54

Browse files
Thomasrludomikula
Thomasr
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)