Skip to content

Commit 5be6544

Browse files
committed
refactor: 닉네임이 null인 사용자도 검색되도록 변경
1 parent 156cad3 commit 5be6544

2 files changed

Lines changed: 42 additions & 7 deletions

File tree

src/main/java/org/devkor/apu/saerok_server/domain/user/core/repository/UserRepository.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ public List<User> searchActiveUsers(String nicknameQuery, Long idQuery, int offs
6868
SELECT u FROM User u
6969
WHERE u.deletedAt IS NULL
7070
AND u.signupStatus <> :withdrawn
71-
AND u.nickname IS NOT NULL
72-
AND TRIM(u.nickname) <> ''
7371
""";
7472
jpql += buildSearchPredicate(nicknameQuery, idQuery);
7573
jpql += " ORDER BY u.nickname ASC, u.id ASC";
@@ -89,8 +87,6 @@ public long countSearchActiveUsers(String nicknameQuery, Long idQuery) {
8987
SELECT COUNT(u) FROM User u
9088
WHERE u.deletedAt IS NULL
9189
AND u.signupStatus <> :withdrawn
92-
AND u.nickname IS NOT NULL
93-
AND TRIM(u.nickname) <> ''
9490
""";
9591
jpql += buildSearchPredicate(nicknameQuery, idQuery);
9692

@@ -105,16 +101,17 @@ AND TRIM(u.nickname) <> ''
105101
private String buildSearchPredicate(String nicknameQuery, Long idQuery) {
106102
boolean hasNickname = nicknameQuery != null;
107103
boolean hasId = idQuery != null;
104+
String nicknamePresent = "(u.nickname IS NOT NULL AND TRIM(u.nickname) <> '')";
108105
if (hasNickname && hasId) {
109-
return " AND (u.nickname LIKE :nicknameQuery OR u.id = :idQuery)";
106+
return " AND ((" + nicknamePresent + " AND u.nickname LIKE :nicknameQuery) OR u.id = :idQuery)";
110107
}
111108
if (hasNickname) {
112-
return " AND u.nickname LIKE :nicknameQuery";
109+
return " AND " + nicknamePresent + " AND u.nickname LIKE :nicknameQuery";
113110
}
114111
if (hasId) {
115112
return " AND u.id = :idQuery";
116113
}
117-
return "";
114+
return " AND " + nicknamePresent;
118115
}
119116

120117
private void bindSearchParameters(Query query, String nicknameQuery, Long idQuery) {

src/test/java/org/devkor/apu/saerok_server/domain/user/core/repository/UserRepositoryTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,44 @@ void searchActiveUsers_byIdOrNickname() {
238238
assertThat(repo.countSearchActiveUsers("or-", charlie.getId())).isEqualTo(3);
239239
}
240240

241+
@Test @DisplayName("searchActiveUsers - 닉네임 null인 활성 사용자도 ID로 검색됨")
242+
void searchActiveUsers_byIdAllowsNullNickname() {
243+
User profileRequired = user("profile-required@example.com", null);
244+
profileRequired.setSignupStatus(SignupStatusType.PROFILE_REQUIRED);
245+
em.flush(); em.clear();
246+
247+
List<User> users = repo.searchActiveUsers(null, profileRequired.getId(), 0, 20);
248+
249+
assertThat(users).extracting(User::getId).containsExactly(profileRequired.getId());
250+
assertThat(repo.countSearchActiveUsers(null, profileRequired.getId())).isEqualTo(1);
251+
}
252+
253+
@Test @DisplayName("searchActiveUsers - 닉네임 검색에는 null 닉네임 사용자 제외")
254+
void searchActiveUsers_nicknameQueryExcludesNullNickname() {
255+
User withNickname = user("with-nick@example.com", "with-nick-target");
256+
withNickname.setSignupStatus(SignupStatusType.COMPLETED);
257+
User noNickname = user("no-nick@example.com", null);
258+
noNickname.setSignupStatus(SignupStatusType.PROFILE_REQUIRED);
259+
em.flush(); em.clear();
260+
261+
List<User> users = repo.searchActiveUsers("nick-target", null, 0, 20);
262+
263+
assertThat(users).extracting(User::getNickname).containsExactly("with-nick-target");
264+
}
265+
266+
@Test @DisplayName("searchActiveUsers - 쿼리 없을 때 닉네임 null 사용자 제외")
267+
void searchActiveUsers_noQueryExcludesNullNickname() {
268+
User withNickname = user("default-nick@example.com", "default-nick");
269+
withNickname.setSignupStatus(SignupStatusType.COMPLETED);
270+
User noNickname = user("default-no-nick@example.com", null);
271+
noNickname.setSignupStatus(SignupStatusType.PROFILE_REQUIRED);
272+
em.flush(); em.clear();
273+
274+
List<User> users = repo.searchActiveUsers(null, null, 0, 20);
275+
276+
assertThat(users).extracting(User::getNickname).containsExactly("default-nick");
277+
}
278+
241279
@Test @DisplayName("searchActiveUsers - 탈퇴/삭제 사용자는 ID 검색에서도 제외")
242280
void searchActiveUsers_byIdExcludesInactive() {
243281
User withdrawn = user("inactive-withdrawn@example.com", "withdrawn-user");

0 commit comments

Comments
 (0)