Skip to content

Commit 9369464

Browse files
committed
Refactor: Extracted common user search logic into a separate service class
- Moved findUsers method to UserSearchService to remove duplication - Updated OidcLocalUserServiceImpl and SpringSecurityUserService to use the new service - Improved code maintainability and reusability
1 parent 569faaa commit 9369464

File tree

3 files changed

+65
-65
lines changed

3 files changed

+65
-65
lines changed

apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/oidc/OidcLocalUserServiceImpl.java

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import java.util.List;
2828
import java.util.Map;
2929
import java.util.stream.Collectors;
30+
31+
import com.ctrip.framework.apollo.portal.util.UserSearchService;
3032
import org.springframework.security.core.GrantedAuthority;
3133
import org.springframework.security.core.authority.SimpleGrantedAuthority;
3234
import org.springframework.security.core.userdetails.User;
@@ -53,11 +55,14 @@ public class OidcLocalUserServiceImpl implements OidcLocalUserService {
5355

5456
private final UserRepository userRepository;
5557

58+
private final UserSearchService userSearchService;
59+
5660
public OidcLocalUserServiceImpl(
5761
JdbcUserDetailsManager userDetailsManager,
5862
UserRepository userRepository) {
5963
this.userDetailsManager = userDetailsManager;
6064
this.userRepository = userRepository;
65+
this.userSearchService = new UserSearchService(userRepository);
6166
}
6267

6368
@Transactional(rollbackFor = Exception.class)
@@ -89,46 +94,14 @@ public void updateUserInfo(UserInfo newUserInfo) {
8994
@Override
9095
public List<UserInfo> searchUsers(String keyword, int offset, int limit,
9196
boolean includeInactiveUsers) {
92-
List<UserPO> users = this.findUsers(keyword, includeInactiveUsers);
97+
List<UserPO> users = this.userSearchService.findUsers(keyword, includeInactiveUsers);
9398
if (CollectionUtils.isEmpty(users)) {
9499
return Collections.emptyList();
95100
}
96101
return users.stream().map(UserPO::toUserInfo)
97102
.collect(Collectors.toList());
98103
}
99104

100-
private List<UserPO> findUsers(String keyword, boolean includeInactiveUsers) {
101-
Map<Long, UserPO> users = new HashMap<>();
102-
List<UserPO> byUsername;
103-
List<UserPO> byUserDisplayName;
104-
if (includeInactiveUsers) {
105-
if (StringUtils.isEmpty(keyword)) {
106-
return (List<UserPO>) userRepository.findAll();
107-
}
108-
byUsername = userRepository.findByUsernameLike("%" + keyword + "%");
109-
byUserDisplayName = userRepository.findByUserDisplayNameLike("%" + keyword + "%");
110-
} else {
111-
if (StringUtils.isEmpty(keyword)) {
112-
return userRepository.findFirst20ByEnabled(1);
113-
}
114-
byUsername = userRepository
115-
.findByUsernameLikeAndEnabled("%" + keyword + "%", 1);
116-
byUserDisplayName = userRepository
117-
.findByUserDisplayNameLikeAndEnabled("%" + keyword + "%", 1);
118-
}
119-
if (!CollectionUtils.isEmpty(byUsername)) {
120-
for (UserPO user : byUsername) {
121-
users.put(user.getId(), user);
122-
}
123-
}
124-
if (!CollectionUtils.isEmpty(byUserDisplayName)) {
125-
for (UserPO user : byUserDisplayName) {
126-
users.put(user.getId(), user);
127-
}
128-
}
129-
return new ArrayList<>(users.values());
130-
}
131-
132105
@Override
133106
public UserInfo findByUserId(String userId) {
134107
UserPO userPO = userRepository.findByUsername(userId);

apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/spi/springsecurity/SpringSecurityUserService.java

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727

2828
import java.util.HashMap;
2929
import java.util.Map;
30+
31+
import com.ctrip.framework.apollo.portal.util.UserSearchService;
3032
import org.springframework.security.crypto.password.PasswordEncoder;
3133
import org.springframework.transaction.annotation.Transactional;
3234
import org.springframework.util.CollectionUtils;
@@ -47,13 +49,16 @@ public class SpringSecurityUserService implements UserService {
4749

4850
private final AuthorityRepository authorityRepository;
4951

52+
private final UserSearchService userSearchService;
53+
5054
public SpringSecurityUserService(
5155
PasswordEncoder passwordEncoder,
5256
UserRepository userRepository,
5357
AuthorityRepository authorityRepository) {
5458
this.passwordEncoder = passwordEncoder;
5559
this.userRepository = userRepository;
5660
this.authorityRepository = authorityRepository;
61+
this.userSearchService = new UserSearchService(userRepository);
5762
}
5863

5964
@Transactional
@@ -102,45 +107,14 @@ public void changeEnabled(UserPO user) {
102107
@Override
103108
public List<UserInfo> searchUsers(String keyword, int offset, int limit,
104109
boolean includeInactiveUsers) {
105-
List<UserPO> users = this.findUsers(keyword, includeInactiveUsers);
110+
List<UserPO> users = this.userSearchService.findUsers(keyword, includeInactiveUsers);
106111
if (CollectionUtils.isEmpty(users)) {
107112
return Collections.emptyList();
108113
}
109114
return users.stream().map(UserPO::toUserInfo)
110115
.collect(Collectors.toList());
111116
}
112117

113-
private List<UserPO> findUsers(String keyword, boolean includeInactiveUsers) {
114-
Map<Long, UserPO> users = new HashMap<>();
115-
List<UserPO> byUsername;
116-
List<UserPO> byUserDisplayName;
117-
if (includeInactiveUsers) {
118-
if (StringUtils.isEmpty(keyword)) {
119-
return (List<UserPO>) userRepository.findAll();
120-
}
121-
byUsername = userRepository.findByUsernameLike("%" + keyword + "%");
122-
byUserDisplayName = userRepository.findByUserDisplayNameLike("%" + keyword + "%");
123-
} else {
124-
if (StringUtils.isEmpty(keyword)) {
125-
return userRepository.findFirst20ByEnabled(1);
126-
}
127-
byUsername = userRepository.findByUsernameLikeAndEnabled("%" + keyword + "%", 1);
128-
byUserDisplayName = userRepository
129-
.findByUserDisplayNameLikeAndEnabled("%" + keyword + "%", 1);
130-
}
131-
if (!CollectionUtils.isEmpty(byUsername)) {
132-
for (UserPO user : byUsername) {
133-
users.put(user.getId(), user);
134-
}
135-
}
136-
if (!CollectionUtils.isEmpty(byUserDisplayName)) {
137-
for (UserPO user : byUserDisplayName) {
138-
users.put(user.getId(), user);
139-
}
140-
}
141-
return new ArrayList<>(users.values());
142-
}
143-
144118
@Override
145119
public UserInfo findByUserId(String userId) {
146120
UserPO userPO = userRepository.findByUsername(userId);
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.ctrip.framework.apollo.portal.util;
2+
3+
import com.ctrip.framework.apollo.portal.entity.po.UserPO;
4+
import com.ctrip.framework.apollo.portal.repository.UserRepository;
5+
import org.springframework.util.CollectionUtils;
6+
import org.apache.commons.lang3.StringUtils;
7+
8+
import java.util.ArrayList;
9+
import java.util.HashMap;
10+
import java.util.List;
11+
import java.util.Map;
12+
13+
public class UserSearchService {
14+
15+
private final UserRepository userRepository;
16+
17+
public UserSearchService(UserRepository userRepository) {
18+
this.userRepository = userRepository;
19+
}
20+
21+
public List<UserPO> findUsers(String keyword, boolean includeInactiveUsers) {
22+
Map<Long, UserPO> users = new HashMap<>();
23+
List<UserPO> byUsername;
24+
List<UserPO> byUserDisplayName;
25+
26+
if (includeInactiveUsers) {
27+
if (StringUtils.isEmpty(keyword)) {
28+
return (List<UserPO>) userRepository.findAll();
29+
}
30+
byUsername = userRepository.findByUsernameLike("%" + keyword + "%");
31+
byUserDisplayName = userRepository.findByUserDisplayNameLike("%" + keyword + "%");
32+
} else {
33+
if (StringUtils.isEmpty(keyword)) {
34+
return userRepository.findFirst20ByEnabled(1);
35+
}
36+
byUsername = userRepository.findByUsernameLikeAndEnabled("%" + keyword + "%", 1);
37+
byUserDisplayName = userRepository.findByUserDisplayNameLikeAndEnabled("%" + keyword + "%", 1);
38+
}
39+
40+
if (!CollectionUtils.isEmpty(byUsername)) {
41+
for (UserPO user : byUsername) {
42+
users.put(user.getId(), user);
43+
}
44+
}
45+
if (!CollectionUtils.isEmpty(byUserDisplayName)) {
46+
for (UserPO user : byUserDisplayName) {
47+
users.put(user.getId(), user);
48+
}
49+
}
50+
51+
return new ArrayList<>(users.values());
52+
}
53+
}

0 commit comments

Comments
 (0)