From 44cd8246154ec81548b81eb5207d9a2b7e501b99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=84=8B=E1=85=B4=E1=84=8C=E1=85=A6?= Date: Sun, 10 Sep 2023 05:09:30 +0900 Subject: [PATCH] =?UTF-8?q?YEL-159=20[feat]=20=EC=96=B4=EB=93=9C=EB=AF=BC?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=EA=B2=80=EC=83=89=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/AdminController.java | 7 ++--- .../UserAdminBadRequestException.java | 11 ++++++++ .../domain/admin/service/AdminService.java | 27 +++++++++++++++---- .../user/repository/UserJpaRepository.java | 6 +++++ .../user/repository/UserRepository.java | 6 ++++- .../user/repository/UserRepositoryImpl.java | 12 ++++++++- .../yello/server/global/common/ErrorCode.java | 1 + .../exception/ControllerExceptionAdvice.java | 4 ++- .../domain/user/FakeUserRepository.java | 20 +++++++++++++- 9 files changed, 82 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/yello/server/domain/admin/exception/UserAdminBadRequestException.java diff --git a/src/main/java/com/yello/server/domain/admin/controller/AdminController.java b/src/main/java/com/yello/server/domain/admin/controller/AdminController.java index 36a44c7f..7c6bc4a0 100644 --- a/src/main/java/com/yello/server/domain/admin/controller/AdminController.java +++ b/src/main/java/com/yello/server/domain/admin/controller/AdminController.java @@ -47,11 +47,12 @@ public BaseResponse postAdminLogin(@RequestBody AdminLoginRe @GetMapping("/user") public BaseResponse getUserAdmin(@AccessTokenUser User user, @RequestParam Integer page, - @Nullable @RequestParam String yelloId) { - val data = yelloId == null + @Nullable @RequestParam String field, + @Nullable @RequestParam String value) { + val data = (field == null && value == null) ? adminService.findUser(user.getId(), PaginationFactory.createPageableLimitTen(page)) : adminService.findUserContaining(user.getId(), PaginationFactory.createPageableLimitTen(page), - yelloId); + field, value); return BaseResponse.success(READ_USER_ADMIN_SUCCESS, data); } diff --git a/src/main/java/com/yello/server/domain/admin/exception/UserAdminBadRequestException.java b/src/main/java/com/yello/server/domain/admin/exception/UserAdminBadRequestException.java new file mode 100644 index 00000000..e4978566 --- /dev/null +++ b/src/main/java/com/yello/server/domain/admin/exception/UserAdminBadRequestException.java @@ -0,0 +1,11 @@ +package com.yello.server.domain.admin.exception; + +import com.yello.server.global.common.ErrorCode; +import com.yello.server.global.exception.CustomException; + +public class UserAdminBadRequestException extends CustomException { + + public UserAdminBadRequestException(ErrorCode error) { + super(error, "[UserAdminBadRequestException] " + error.getMessage()); + } +} diff --git a/src/main/java/com/yello/server/domain/admin/service/AdminService.java b/src/main/java/com/yello/server/domain/admin/service/AdminService.java index 52a0d3a0..53ed8c9a 100644 --- a/src/main/java/com/yello/server/domain/admin/service/AdminService.java +++ b/src/main/java/com/yello/server/domain/admin/service/AdminService.java @@ -1,6 +1,7 @@ package com.yello.server.domain.admin.service; import static com.yello.server.global.common.ErrorCode.DEVICE_TOKEN_CONFLICT_USER_EXCEPTION; +import static com.yello.server.global.common.ErrorCode.USER_ADMIN_BAD_REQUEST_EXCEPTION; import static com.yello.server.global.common.ErrorCode.USER_ADMIN_NOT_FOUND_EXCEPTION; import static com.yello.server.global.common.ErrorCode.UUID_CONFLICT_USER_EXCEPTION; import static com.yello.server.global.common.ErrorCode.YELLOID_CONFLICT_USER_EXCEPTION; @@ -13,6 +14,7 @@ import com.yello.server.domain.admin.dto.response.AdminUserContentVO; import com.yello.server.domain.admin.dto.response.AdminUserDetailResponse; import com.yello.server.domain.admin.dto.response.AdminUserResponse; +import com.yello.server.domain.admin.exception.UserAdminBadRequestException; import com.yello.server.domain.admin.exception.UserAdminNotFoundException; import com.yello.server.domain.admin.repository.UserAdminRepository; import com.yello.server.domain.authorization.service.TokenProvider; @@ -24,6 +26,7 @@ import com.yello.server.domain.user.repository.UserRepository; import com.yello.server.domain.user.service.UserManager; import com.yello.server.global.common.dto.EmptyObject; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import lombok.RequiredArgsConstructor; @@ -74,16 +77,30 @@ public AdminUserResponse findUser(Long adminId, Pageable page) { return AdminUserResponse.of(totalCount, list); } - public AdminUserResponse findUserContaining(Long adminId, Pageable page, String yelloId) { + public AdminUserResponse findUserContaining(Long adminId, Pageable page, String field, String value) { // exception final User admin = userRepository.getById(adminId); userAdminRepository.getByUser(admin); // logic - final Long totalCount = userRepository.countAllByYelloIdContaining(yelloId); - final List list = userRepository.findAllContaining(page, yelloId).stream() - .map(AdminUserContentVO::of) - .toList(); + Long totalCount = 0L; + List list = new ArrayList<>(); + + if (field == null || value == null) { + throw new UserAdminBadRequestException(USER_ADMIN_BAD_REQUEST_EXCEPTION); + } else if (field.equals("yelloId")) { + totalCount = userRepository.countAllByYelloIdContaining(value); + list = userRepository.findAllByYelloIdContaining(page, value).stream() + .map(AdminUserContentVO::of) + .toList(); + } else if (field.equals("name")) { + totalCount = userRepository.countAllByNameContaining(value); + list = userRepository.findAllByNameContaining(page, value).stream() + .map(AdminUserContentVO::of) + .toList(); + } else { + throw new UserAdminBadRequestException(USER_ADMIN_BAD_REQUEST_EXCEPTION); + } return AdminUserResponse.of(totalCount, list); } diff --git a/src/main/java/com/yello/server/domain/user/repository/UserJpaRepository.java b/src/main/java/com/yello/server/domain/user/repository/UserJpaRepository.java index a32e25cd..a2f07c6d 100644 --- a/src/main/java/com/yello/server/domain/user/repository/UserJpaRepository.java +++ b/src/main/java/com/yello/server/domain/user/repository/UserJpaRepository.java @@ -91,7 +91,13 @@ List findAllByOtherGroupContainingYelloId(@Param("groupName") String group Long countAllByYelloIdContaining(String yelloId); + Long countAllByNameContaining(String name); + @Query("select u from User u " + "where LOWER(u.yelloId) like LOWER(CONCAT('%', :yelloId, '%'))") Page findAllByYelloIdContaining(Pageable pageable, @Param("yelloId") String yelloId); + + @Query("select u from User u " + + "where LOWER(u.name) like LOWER(CONCAT('%', :name, '%'))") + Page findAllByNameContaining(Pageable pageable, @Param("name") String name); } diff --git a/src/main/java/com/yello/server/domain/user/repository/UserRepository.java b/src/main/java/com/yello/server/domain/user/repository/UserRepository.java index aef85ceb..c44767ca 100644 --- a/src/main/java/com/yello/server/domain/user/repository/UserRepository.java +++ b/src/main/java/com/yello/server/domain/user/repository/UserRepository.java @@ -57,9 +57,13 @@ List findAllByOtherGroupContainingYelloId(String groupName, String keyword Long countAllByYelloIdContaining(String yelloId); + Long countAllByNameContaining(String name); + Page findAll(Pageable pageable); - Page findAllContaining(Pageable pageable, String yelloId); + Page findAllByYelloIdContaining(Pageable pageable, String yelloId); + Page findAllByNameContaining(Pageable pageable, String name); + void delete(User user); } diff --git a/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java b/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java index b3c0000e..b33a3b21 100644 --- a/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java +++ b/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java @@ -142,16 +142,26 @@ public Long countAllByYelloIdContaining(String yelloId) { return userJpaRepository.countAllByYelloIdContaining(yelloId); } + @Override + public Long countAllByNameContaining(String name) { + return userJpaRepository.countAllByNameContaining(name); + } + @Override public Page findAll(Pageable pageable) { return userJpaRepository.findAll(pageable); } @Override - public Page findAllContaining(Pageable pageable, String yelloId) { + public Page findAllByYelloIdContaining(Pageable pageable, String yelloId) { return userJpaRepository.findAllByYelloIdContaining(pageable, yelloId); } + @Override + public Page findAllByNameContaining(Pageable pageable, String name) { + return userJpaRepository.findAllByNameContaining(pageable, name); + } + @Override public void delete(User user) { userJpaRepository.delete(user); diff --git a/src/main/java/com/yello/server/global/common/ErrorCode.java b/src/main/java/com/yello/server/global/common/ErrorCode.java index 5d27d2f5..9f2a8090 100644 --- a/src/main/java/com/yello/server/global/common/ErrorCode.java +++ b/src/main/java/com/yello/server/global/common/ErrorCode.java @@ -35,6 +35,7 @@ public enum ErrorCode { GOOGLE_INAPP_BAD_REQUEST_EXCEPTION(BAD_REQUEST, "해당 영수증은 취소되었거나, 대기 중인 결제입니다."), APPLE_IN_APP_BAD_REQUEST_EXCEPTION(BAD_REQUEST, "존재하지 않는 영수증입니다."), METHOD_ARGUMENT_TYPE_MISMATCH_EXCEPTION(BAD_REQUEST, "입력한 값의 타입이 올바르지 않습니다."), + USER_ADMIN_BAD_REQUEST_EXCEPTION(BAD_REQUEST, "검색 필드가 없습니다."), /** * 401 UNAUTHORIZED diff --git a/src/main/java/com/yello/server/global/exception/ControllerExceptionAdvice.java b/src/main/java/com/yello/server/global/exception/ControllerExceptionAdvice.java index 68fbd389..4524a428 100644 --- a/src/main/java/com/yello/server/global/exception/ControllerExceptionAdvice.java +++ b/src/main/java/com/yello/server/global/exception/ControllerExceptionAdvice.java @@ -10,6 +10,7 @@ import static org.springframework.http.HttpStatus.NOT_FOUND; import static org.springframework.http.HttpStatus.UNAUTHORIZED; +import com.yello.server.domain.admin.exception.UserAdminBadRequestException; import com.yello.server.domain.admin.exception.UserAdminNotFoundException; import com.yello.server.domain.authorization.exception.AuthBadRequestException; import com.yello.server.domain.authorization.exception.CustomAuthenticationException; @@ -97,7 +98,8 @@ void handleException(HttpServletRequest request, Exception exception) throws Exc QuestionException.class, PurchaseException.class, GoogleBadRequestException.class, - AppleBadRequestException.class + AppleBadRequestException.class, + UserAdminBadRequestException.class }) public ResponseEntity BadRequestException(CustomException exception) { return ResponseEntity.status(BAD_REQUEST) diff --git a/src/test/java/com/yello/server/domain/user/FakeUserRepository.java b/src/test/java/com/yello/server/domain/user/FakeUserRepository.java index d6cddad2..860dc43f 100644 --- a/src/test/java/com/yello/server/domain/user/FakeUserRepository.java +++ b/src/test/java/com/yello/server/domain/user/FakeUserRepository.java @@ -213,6 +213,14 @@ public Long countAllByYelloIdContaining(String yelloId) { .size(); } + @Override + public Long countAllByNameContaining(String name) { + return (long) data.stream() + .filter(user -> user.getName().contains(name)) + .toList() + .size(); + } + @Override public Page findAll(Pageable pageable) { final List userList = data.stream() @@ -223,7 +231,7 @@ public Page findAll(Pageable pageable) { } @Override - public Page findAllContaining(Pageable pageable, String yelloId) { + public Page findAllByYelloIdContaining(Pageable pageable, String yelloId) { final List userList = data.stream() .filter(user -> user.getYelloId().contains(yelloId)) .skip(pageable.getOffset()) @@ -232,6 +240,16 @@ public Page findAllContaining(Pageable pageable, String yelloId) { return new PageImpl<>(userList); } + @Override + public Page findAllByNameContaining(Pageable pageable, String name) { + final List userList = data.stream() + .filter(user -> user.getName().contains(name)) + .skip(pageable.getOffset()) + .limit(pageable.getPageSize()) + .toList(); + return new PageImpl<>(userList); + } + @Override public void delete(User user) { data.remove(user);