Skip to content

Commit 140ba09

Browse files
committed
fix: remove automatic cyclic dependencies breaking
1 parent 1b77959 commit 140ba09

File tree

13 files changed

+89
-69
lines changed

13 files changed

+89
-69
lines changed

server/api-service/lombok.config

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copy the Qualifier annotation from the instance variables to the constructor
2+
# see https://github.com/rzwitserloot/lombok/issues/745
3+
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
4+
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Value
5+
lombok.copyableAnnotations += org.springframework.context.annotation.Lazy
6+

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/datasource/service/impl/DatasourceServiceImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.lowcoder.sdk.models.DatasourceTestResult;
2424
import org.lowcoder.sdk.models.JsDatasourceConnectionConfig;
2525
import org.lowcoder.sdk.util.LocaleUtils;
26+
import org.springframework.context.annotation.Lazy;
2627
import org.springframework.dao.DuplicateKeyException;
2728
import org.springframework.stereotype.Service;
2829
import reactor.core.publisher.Flux;
@@ -49,6 +50,7 @@ public class DatasourceServiceImpl implements DatasourceService {
4950

5051
private final DatasourceMetaInfoService datasourceMetaInfoService;
5152
private final ApplicationRepository applicationRepository;
53+
@Lazy
5254
private final ResourcePermissionService resourcePermissionService;
5355
private final DatasourceRepository repository;
5456
private final DatasourcePluginClient datasourcePluginClient;

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberServiceImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public class OrgMemberServiceImpl implements OrgMemberService {
4343
private final BiRelationService biRelationService;
4444
private final GroupMemberService groupMemberService;
4545
private final GroupService groupService;
46+
@Lazy
4647
private final OrganizationService organizationService;
4748
private final CommonConfig commonConfig;
4849
private final MongoUpsertHelper mongoUpsertHelper;

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@
2424
import org.lowcoder.sdk.exception.BizError;
2525
import org.lowcoder.sdk.exception.BizException;
2626
import org.lowcoder.sdk.util.UriUtils;
27-
import org.springframework.beans.factory.annotation.Autowired;
2827
import org.springframework.context.ApplicationContext;
29-
import org.springframework.context.annotation.Lazy;
3028
import org.springframework.data.mongodb.core.query.Update;
3129
import org.springframework.http.codec.multipart.Part;
3230
import org.springframework.stereotype.Service;

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ApplicationPermissionHandler.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,5 @@
11
package org.lowcoder.domain.permission.service;
22

3-
import static com.google.common.collect.Sets.newHashSet;
4-
import static java.util.Collections.emptyMap;
5-
import static java.util.function.Function.identity;
6-
import static org.apache.commons.collections4.SetUtils.union;
7-
import static org.lowcoder.domain.permission.model.ResourceHolder.USER;
8-
import static org.lowcoder.sdk.constants.Authentication.ANONYMOUS_USER_ID;
9-
import static org.lowcoder.sdk.util.StreamUtils.collectMap;
10-
11-
import java.util.Collection;
12-
import java.util.Collections;
13-
import java.util.HashSet;
14-
import java.util.List;
15-
import java.util.Map;
16-
import java.util.Set;
17-
183
import lombok.RequiredArgsConstructor;
194
import org.lowcoder.domain.application.model.Application;
205
import org.lowcoder.domain.application.model.ApplicationRequestType;
@@ -24,18 +9,27 @@
249
import org.lowcoder.domain.permission.model.ResourceRole;
2510
import org.lowcoder.domain.permission.model.ResourceType;
2611
import org.lowcoder.domain.solutions.TemplateSolutionService;
27-
import org.springframework.beans.factory.annotation.Autowired;
2812
import org.springframework.context.annotation.Lazy;
2913
import org.springframework.stereotype.Component;
30-
3114
import reactor.core.publisher.Mono;
3215

16+
import java.util.*;
17+
18+
import static com.google.common.collect.Sets.newHashSet;
19+
import static java.util.Collections.emptyMap;
20+
import static java.util.function.Function.identity;
21+
import static org.apache.commons.collections4.SetUtils.union;
22+
import static org.lowcoder.domain.permission.model.ResourceHolder.USER;
23+
import static org.lowcoder.sdk.constants.Authentication.ANONYMOUS_USER_ID;
24+
import static org.lowcoder.sdk.util.StreamUtils.collectMap;
25+
3326
@RequiredArgsConstructor
3427
@Component
3528
class ApplicationPermissionHandler extends ResourcePermissionHandler {
3629

3730
private static final ResourceRole ANONYMOUS_USER_ROLE = ResourceRole.VIEWER;
3831

32+
@Lazy
3933
private final ApplicationService applicationService;
4034
private final TemplateSolutionService templateSolutionService;
4135

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/DatasourcePermissionHandler.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
package org.lowcoder.domain.permission.service;
22

3-
import static org.lowcoder.domain.permission.model.ResourceHolder.USER;
4-
5-
import java.util.Collection;
6-
import java.util.Collections;
7-
import java.util.List;
8-
import java.util.Map;
9-
import java.util.function.Function;
10-
import java.util.stream.Collectors;
11-
3+
import com.google.common.collect.Maps;
124
import lombok.RequiredArgsConstructor;
135
import org.apache.commons.collections4.CollectionUtils;
146
import org.lowcoder.domain.application.model.ApplicationRequestType;
@@ -18,13 +10,17 @@
1810
import org.lowcoder.domain.permission.model.ResourcePermission;
1911
import org.lowcoder.domain.permission.model.ResourceRole;
2012
import org.lowcoder.domain.permission.model.ResourceType;
21-
import org.springframework.beans.factory.annotation.Autowired;
22-
import org.springframework.context.annotation.Lazy;
2313
import org.springframework.stereotype.Component;
14+
import reactor.core.publisher.Mono;
2415

25-
import com.google.common.collect.Maps;
16+
import java.util.Collection;
17+
import java.util.Collections;
18+
import java.util.List;
19+
import java.util.Map;
20+
import java.util.function.Function;
21+
import java.util.stream.Collectors;
2622

27-
import reactor.core.publisher.Mono;
23+
import static org.lowcoder.domain.permission.model.ResourceHolder.USER;
2824

2925
@RequiredArgsConstructor
3026
@Component

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ResourcePermissionHandler.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.lowcoder.domain.permission.model.*;
1212
import org.lowcoder.sdk.config.CommonConfig;
1313
import org.springframework.beans.factory.annotation.Autowired;
14+
import org.springframework.context.annotation.Lazy;
1415
import reactor.core.publisher.Mono;
1516

1617
import java.util.*;
@@ -20,8 +21,9 @@
2021
import static java.util.stream.Collectors.toMap;
2122
import static org.lowcoder.sdk.constants.Authentication.isAnonymousUser;
2223

23-
abstract class ResourcePermissionHandler {
24+
abstract class ResourcePermissionHandler implements ResourcePermissionHandlerService {
2425

26+
@Lazy
2527
@Autowired
2628
private ResourcePermissionService resourcePermissionService;
2729

@@ -34,9 +36,10 @@ abstract class ResourcePermissionHandler {
3436
@Autowired
3537
protected CommonConfig config;
3638

39+
@Override
3740
public Mono<Map<String, List<ResourcePermission>>> getAllMatchingPermissions(String userId,
38-
Collection<String> resourceIds,
39-
ResourceAction resourceAction) {
41+
Collection<String> resourceIds,
42+
ResourceAction resourceAction) {
4043

4144
ResourceType resourceType = resourceAction.getResourceType();
4245

@@ -66,8 +69,9 @@ public Mono<Map<String, List<ResourcePermission>>> getAllMatchingPermissions(Str
6669
});
6770
}
6871

72+
@Override
6973
public Mono<UserPermissionOnResourceStatus> checkUserPermissionStatusOnResource(String userId,
70-
String resourceId, ResourceAction resourceAction) {
74+
String resourceId, ResourceAction resourceAction) {
7175

7276
ResourceType resourceType = resourceAction.getResourceType();
7377

@@ -206,8 +210,9 @@ private Mono<Set<String>> getUserGroupIds(String orgId, String userId) {
206210

207211
protected abstract Mono<String> getOrgId(String resourceId);
208212

209-
public Mono<UserPermissionOnResourceStatus> checkUserPermissionStatusOnApplication(String userId, String resourceId,
210-
ResourceAction resourceAction, ApplicationRequestType requestType)
213+
@Override
214+
public Mono<UserPermissionOnResourceStatus> checkUserPermissionStatusOnApplication(String userId, String resourceId,
215+
ResourceAction resourceAction, ApplicationRequestType requestType)
211216
{
212217
ResourceType resourceType = resourceAction.getResourceType();
213218

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.lowcoder.domain.permission.service;
2+
3+
import org.lowcoder.domain.application.model.ApplicationRequestType;
4+
import org.lowcoder.domain.permission.model.ResourceAction;
5+
import org.lowcoder.domain.permission.model.ResourcePermission;
6+
import org.lowcoder.domain.permission.model.UserPermissionOnResourceStatus;
7+
import reactor.core.publisher.Mono;
8+
9+
import java.util.Collection;
10+
import java.util.List;
11+
import java.util.Map;
12+
13+
public interface ResourcePermissionHandlerService {
14+
Mono<Map<String, List<ResourcePermission>>> getAllMatchingPermissions(String userId,
15+
Collection<String> resourceIds,
16+
ResourceAction resourceAction);
17+
18+
Mono<UserPermissionOnResourceStatus> checkUserPermissionStatusOnResource(String userId,
19+
String resourceId, ResourceAction resourceAction);
20+
21+
Mono<UserPermissionOnResourceStatus> checkUserPermissionStatusOnApplication(String userId, String resourceId,
22+
ResourceAction resourceAction, ApplicationRequestType requestType);
23+
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ResourcePermissionServiceImpl.java

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,40 @@
11
package org.lowcoder.domain.permission.service;
22

3-
import static java.util.Collections.singleton;
4-
import static org.apache.commons.collections4.SetUtils.emptyIfNull;
5-
import static org.lowcoder.sdk.exception.BizError.INVALID_PERMISSION_OPERATION;
6-
import static org.lowcoder.sdk.exception.BizError.NOT_AUTHORIZED;
7-
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
8-
import static org.lowcoder.sdk.util.ExceptionUtils.ofException;
9-
10-
import java.util.Collection;
11-
import java.util.Collections;
12-
import java.util.Comparator;
13-
import java.util.List;
14-
import java.util.Map;
15-
import java.util.Map.Entry;
16-
import java.util.Set;
17-
3+
import com.google.common.collect.HashMultimap;
4+
import com.google.common.collect.Multimap;
185
import jakarta.annotation.Nullable;
196
import jakarta.validation.constraints.NotNull;
20-
217
import lombok.RequiredArgsConstructor;
228
import org.apache.commons.collections4.CollectionUtils;
239
import org.lowcoder.domain.application.model.ApplicationRequestType;
24-
import org.lowcoder.domain.permission.model.ResourceAction;
25-
import org.lowcoder.domain.permission.model.ResourceHolder;
26-
import org.lowcoder.domain.permission.model.ResourcePermission;
27-
import org.lowcoder.domain.permission.model.ResourceRole;
28-
import org.lowcoder.domain.permission.model.ResourceType;
29-
import org.lowcoder.domain.permission.model.UserPermissionOnResourceStatus;
10+
import org.lowcoder.domain.permission.model.*;
3011
import org.lowcoder.infra.annotation.NonEmptyMono;
3112
import org.lowcoder.infra.annotation.PossibleEmptyMono;
3213
import org.lowcoder.sdk.exception.BizException;
33-
import org.springframework.beans.factory.annotation.Autowired;
34-
import org.springframework.context.annotation.Lazy;
14+
import org.springframework.beans.factory.annotation.Qualifier;
3515
import org.springframework.stereotype.Service;
36-
37-
import com.google.common.collect.HashMultimap;
38-
import com.google.common.collect.Multimap;
39-
4016
import reactor.core.publisher.Flux;
4117
import reactor.core.publisher.Mono;
4218

19+
import java.util.*;
20+
import java.util.Map.Entry;
21+
22+
import static java.util.Collections.singleton;
23+
import static org.apache.commons.collections4.SetUtils.emptyIfNull;
24+
import static org.lowcoder.sdk.exception.BizError.INVALID_PERMISSION_OPERATION;
25+
import static org.lowcoder.sdk.exception.BizError.NOT_AUTHORIZED;
26+
import static org.lowcoder.sdk.util.ExceptionUtils.ofError;
27+
import static org.lowcoder.sdk.util.ExceptionUtils.ofException;
28+
4329
@RequiredArgsConstructor
4430
@Service
4531
public class ResourcePermissionServiceImpl implements ResourcePermissionService {
4632

4733
private final ResourcePermissionRepository repository;
48-
private final ApplicationPermissionHandler applicationPermissionHandler;
49-
private final DatasourcePermissionHandler datasourcePermissionHandler;
34+
@Qualifier("applicationPermissionHandler")
35+
private final ResourcePermissionHandlerService applicationPermissionHandler;
36+
@Qualifier("datasourcePermissionHandler")
37+
private final ResourcePermissionHandlerService datasourcePermissionHandler;
5038

5139
@Override
5240
public Mono<Map<String, Collection<ResourcePermission>>> getByResourceTypeAndResourceIds(ResourceType resourceType,
@@ -146,7 +134,7 @@ private Mono<Map<String, List<ResourcePermission>>> getAllMatchingPermissions(St
146134
return resourcePermissionHandler.getAllMatchingPermissions(userId, resourceIds, resourceAction);
147135
}
148136

149-
private ResourcePermissionHandler getResourcePermissionHandler(ResourceType resourceType) {
137+
private ResourcePermissionHandlerService getResourcePermissionHandler(ResourceType resourceType) {
150138
if (resourceType == ResourceType.DATASOURCE) {
151139
return datasourcePermissionHandler;
152140
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.lowcoder.infra.annotation.NonEmptyMono;
1717
import org.lowcoder.infra.util.TupleUtils;
1818
import org.lowcoder.sdk.util.JsonUtils;
19+
import org.springframework.context.annotation.Lazy;
1920
import org.springframework.stereotype.Service;
2021
import reactor.core.publisher.Flux;
2122
import reactor.core.publisher.Mono;
@@ -40,6 +41,7 @@ public class TemplateSolutionServiceImpl implements TemplateSolutionService {
4041

4142
private final TemplateService templateService;
4243
private final DatasourceService datasourceService;
44+
@Lazy
4345
private final ApplicationService applicationService;
4446

4547
@Override

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.lowcoder.sdk.exception.BizException;
4545
import org.lowcoder.sdk.plugin.common.QueryExecutor;
4646
import org.lowcoder.sdk.util.ExceptionUtils;
47+
import org.springframework.context.annotation.Lazy;
4748
import org.springframework.stereotype.Service;
4849
import reactor.core.publisher.Flux;
4950
import reactor.core.publisher.Mono;

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.lowcoder.domain.user.service.UserService;
3131
import org.lowcoder.sdk.exception.BizError;
3232
import org.lowcoder.sdk.exception.BizException;
33+
import org.springframework.context.annotation.Lazy;
3334
import org.springframework.stereotype.Service;
3435
import reactor.core.publisher.Flux;
3536
import reactor.core.publisher.Mono;
@@ -68,6 +69,7 @@ public class FolderApiServiceImpl implements FolderApiService {
6869
private final FolderService folderService;
6970
private final SessionUserService sessionUserService;
7071
private final OrgDevChecker orgDevChecker;
72+
@Lazy
7173
private final UserHomeApiService userHomeApiService;
7274
private final FolderElementRelationService folderElementRelationService;
7375
private final ResourcePermissionService resourcePermissionService;

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserApiServiceImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.lowcoder.domain.user.repository.UserRepository;
1717
import org.lowcoder.domain.user.service.UserService;
1818
import org.springframework.beans.factory.annotation.Autowired;
19+
import org.springframework.context.annotation.Lazy;
1920
import org.springframework.stereotype.Service;
2021

2122
import lombok.extern.slf4j.Slf4j;
@@ -27,6 +28,7 @@
2728
@Slf4j
2829
public class UserApiServiceImpl implements UserApiService {
2930

31+
@Lazy
3032
private final SessionUserService sessionUserService;
3133
private final OrgMemberService orgMemberService;
3234
private final UserService userService;

0 commit comments

Comments
 (0)