From c9ecb7a74e76e1a34b3b8048d6e63d1f0b2476c8 Mon Sep 17 00:00:00 2001 From: junho <2171168@hansung.ac.kr> Date: Wed, 20 Aug 2025 14:31:16 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Refactor:=20=ED=8C=94=EB=A1=9C=EC=9B=8C=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95,?= =?UTF-8?q?=20query=20=EC=97=86=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../card/controller/SearchController.java | 5 +-- .../card/service/SearchServiceImpl.java | 10 +++--- .../user/repository/UserRepository.java | 35 ++++++++++--------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/main/java/EatPic/spring/domain/card/controller/SearchController.java b/src/main/java/EatPic/spring/domain/card/controller/SearchController.java index b4930c4..8b9e927 100644 --- a/src/main/java/EatPic/spring/domain/card/controller/SearchController.java +++ b/src/main/java/EatPic/spring/domain/card/controller/SearchController.java @@ -92,13 +92,14 @@ public ApiResponse getCardsByHashtag( return ApiResponse.onSuccess(result); } - @Operation(summary = "해당 유저 팔로우 목록 조회", description = "팔로우 - 해시태그 검색 api") + @Operation(summary = "해당 유저 팔로잉,팔로워 검색", description = "FOLLOWING은 유저(userId)가 팔로우 중인 목록을, FOLLOWED는 유저를 팔로우하는 목록을 반환합니다." + + "
query가 null일 경우 임의의 팔로잉/팔로워 목록을 반환합니다") @GetMapping("/followList") public ApiResponse searchFollowList( HttpServletRequest request, @RequestParam(value = "follow status")FollowStatus status, @RequestParam(value = "userId")Long userId, - @RequestParam(value = "query") String query, + @RequestParam(value = "query", required = false) String query, @RequestParam(value = "limit", required = false, defaultValue = "10") int limit, @RequestParam(value = "cursor", required = false) Long cursor ) { diff --git a/src/main/java/EatPic/spring/domain/card/service/SearchServiceImpl.java b/src/main/java/EatPic/spring/domain/card/service/SearchServiceImpl.java index 75a3fec..ff9a1e7 100644 --- a/src/main/java/EatPic/spring/domain/card/service/SearchServiceImpl.java +++ b/src/main/java/EatPic/spring/domain/card/service/SearchServiceImpl.java @@ -211,12 +211,16 @@ public SearchResponseDTO.GetAccountListResponseDtoWithFollow getFollowList(HttpS User me = userService.getLoginUser(request); + if(query == null){ + + } + // 페이징 처리 하기 Pageable pageable = PageRequest.of(0, limit + 1, Sort.by("id").ascending()); Slice users = new SliceImpl<>(Collections.emptyList(), pageable, false); switch(status){ case FOLLOWED -> { // 해당 유저를 팔로우한 사람 목록 - users = userRepository.searchAccountNotInFollow(query, cursor, pageable, userId); + users = userRepository.searchAccountInFollower(query, cursor, pageable, userId); } case FOLLOWING -> { // 해당 유저가 팔로우한 사람 목록 users = userRepository.searchAccountInFollow(query, cursor, pageable, userId); @@ -234,12 +238,10 @@ public SearchResponseDTO.GetAccountListResponseDtoWithFollow getFollowList(HttpS // 내가 팔로우한 유저 목록 Set alreadyFollowedIdSet = new HashSet<>(userFollowRepository.findFollowingUserIds(me.getId())); - - List result = users.getContent().stream() .map(user -> UserConverter.toAccountDtoWithFollow( user, - alreadyFollowedIdSet.contains(user.getId())) + alreadyFollowedIdSet.contains(user.getId())) // 내 기준 팔로우 여부 표시 ).toList(); diff --git a/src/main/java/EatPic/spring/domain/user/repository/UserRepository.java b/src/main/java/EatPic/spring/domain/user/repository/UserRepository.java index 17481f3..7b2c548 100644 --- a/src/main/java/EatPic/spring/domain/user/repository/UserRepository.java +++ b/src/main/java/EatPic/spring/domain/user/repository/UserRepository.java @@ -39,8 +39,9 @@ Slice searchAccountInAll(@Param("query") String query, JOIN UserFollow uf ON u.id = uf.targetUser.id WHERE uf.user.id = :loginUserId AND (:cursor IS NULL OR u.id > :cursor) - AND (LOWER(u.nameId) LIKE LOWER(CONCAT(:query, '%')) - OR LOWER(u.nickname) LIKE LOWER(CONCAT(:query, '%'))) + AND (:query IS NULL OR + LOWER(u.nameId) LIKE LOWER(CONCAT(:query, '%')) + OR LOWER(u.nickname) LIKE LOWER(CONCAT(:query, '%'))) ORDER BY u.id ASC """) Slice searchAccountInFollow(@Param("query") String query, @@ -48,6 +49,22 @@ Slice searchAccountInFollow(@Param("query") String query, Pageable pageable, @Param("loginUserId") Long userId); + @Query(""" + SELECT u + FROM User u + JOIN UserFollow uf ON u.id = uf.user.id + WHERE uf.targetUser.id = :loginUserId + AND (:cursor IS NULL OR u.id > :cursor) + AND (:query IS NULL OR + LOWER(u.nameId) LIKE LOWER(CONCAT(:query, '%')) + OR LOWER(u.nickname) LIKE LOWER(CONCAT(:query, '%'))) + ORDER BY u.id ASC +""") + Slice searchAccountInFollower(@Param("query") String query, + @Param("cursor") Long cursor, + Pageable pageable, + @Param("loginUserId") Long userId); + // @Query(""" // SELECT u FROM User u @@ -74,19 +91,5 @@ Slice searchAccountInFollow(@Param("query") String query, // @Param("loginUserId") Long userId); - @Query(""" - SELECT u - FROM User u - WHERE u.id NOT IN ( - SELECT uf.targetUser.id - FROM UserFollow uf - WHERE uf.user.id = :loginUserId - ) - AND (:cursor IS NULL OR u.id > :cursor) - AND u.nickname LIKE %:query% - ORDER BY u.id ASC - """) - Slice searchAccountNotInFollow(@Param("query") String query, - @Param("cursor") Long cursor, Pageable pageable, @Param("loginUserId") Long userId); } \ No newline at end of file From 05ac677b4cb1c2120b24c05f03ae2fd20fb07b9a Mon Sep 17 00:00:00 2001 From: junho <2171168@hansung.ac.kr> Date: Wed, 20 Aug 2025 14:37:44 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Refactor:=20=EC=BF=BC=EB=A6=AC=EB=AC=B8=20?= =?UTF-8?q?=EA=B4=84=ED=98=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/domain/card/service/SearchServiceImpl.java | 4 ---- .../spring/domain/user/repository/UserRepository.java | 8 ++++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/EatPic/spring/domain/card/service/SearchServiceImpl.java b/src/main/java/EatPic/spring/domain/card/service/SearchServiceImpl.java index ff9a1e7..87ceb57 100644 --- a/src/main/java/EatPic/spring/domain/card/service/SearchServiceImpl.java +++ b/src/main/java/EatPic/spring/domain/card/service/SearchServiceImpl.java @@ -211,10 +211,6 @@ public SearchResponseDTO.GetAccountListResponseDtoWithFollow getFollowList(HttpS User me = userService.getLoginUser(request); - if(query == null){ - - } - // 페이징 처리 하기 Pageable pageable = PageRequest.of(0, limit + 1, Sort.by("id").ascending()); Slice users = new SliceImpl<>(Collections.emptyList(), pageable, false); diff --git a/src/main/java/EatPic/spring/domain/user/repository/UserRepository.java b/src/main/java/EatPic/spring/domain/user/repository/UserRepository.java index 7b2c548..c5d7861 100644 --- a/src/main/java/EatPic/spring/domain/user/repository/UserRepository.java +++ b/src/main/java/EatPic/spring/domain/user/repository/UserRepository.java @@ -40,8 +40,8 @@ Slice searchAccountInAll(@Param("query") String query, WHERE uf.user.id = :loginUserId AND (:cursor IS NULL OR u.id > :cursor) AND (:query IS NULL OR - LOWER(u.nameId) LIKE LOWER(CONCAT(:query, '%')) - OR LOWER(u.nickname) LIKE LOWER(CONCAT(:query, '%'))) + (LOWER(u.nameId) LIKE LOWER(CONCAT(:query, '%')) + OR LOWER(u.nickname) LIKE LOWER(CONCAT(:query, '%')))) ORDER BY u.id ASC """) Slice searchAccountInFollow(@Param("query") String query, @@ -56,8 +56,8 @@ Slice searchAccountInFollow(@Param("query") String query, WHERE uf.targetUser.id = :loginUserId AND (:cursor IS NULL OR u.id > :cursor) AND (:query IS NULL OR - LOWER(u.nameId) LIKE LOWER(CONCAT(:query, '%')) - OR LOWER(u.nickname) LIKE LOWER(CONCAT(:query, '%'))) + (LOWER(u.nameId) LIKE LOWER(CONCAT(:query, '%')) + OR LOWER(u.nickname) LIKE LOWER(CONCAT(:query, '%')))) ORDER BY u.id ASC """) Slice searchAccountInFollower(@Param("query") String query,