Skip to content

Commit f1ef211

Browse files
authored
Merge pull request #40 from prgrms-web-devcourse-final-project/feature/mypage
Feature/mypage
2 parents b6bf9bd + 62af1bc commit f1ef211

File tree

9 files changed

+669
-32
lines changed

9 files changed

+669
-32
lines changed

db_dev.mv.db

48 KB
Binary file not shown.

db_dev.trace.db

Lines changed: 616 additions & 0 deletions
Large diffs are not rendered by default.

src/main/java/com/example/log4u/domain/follow/repository/FollowQuerydsl.java

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,38 @@ public FollowQuerydsl() {
2525
super(Follow.class);
2626
}
2727

28-
private NumberPath<Long> getNumberPath(boolean isFollowerQuery) {
29-
return isFollowerQuery ? follow.targetId : follow.initiatorId;
28+
private NumberPath<Long> getNumberPath(boolean isFollowTarget) {
29+
return isFollowTarget ? follow.targetId : follow.initiatorId;
3030
}
3131

32-
private BooleanBuilder getBooleanBuilder(boolean isFollowerQuery, Long userId, Long cursorId) {
32+
private BooleanBuilder getBooleanBuilder(boolean isFollowTarget, Long userId, Long cursorId, String keyword) {
3333
BooleanBuilder builder = new BooleanBuilder();
34-
builder.and(getNumberPath(isFollowerQuery).eq(userId));
34+
NumberPath<Long> numberPath = getNumberPath(isFollowTarget);
35+
36+
builder.and(numberPath.eq(userId));
3537

3638
if (cursorId != null) {
3739
builder.and(follow.id.lt(cursorId));
3840
}
3941

42+
if (keyword != null) {
43+
builder.and(user.nickname.like(keyword));
44+
}
45+
4046
return builder;
4147
}
4248

43-
private List<UserThumbnailResponseDto> getContent(boolean isFollowerQuery, Long userId, Long cursorId) {
44-
BooleanBuilder builder = getBooleanBuilder(isFollowerQuery, userId, cursorId);
49+
private List<UserThumbnailResponseDto> getContent(boolean isFollowTarget, Long userId, Long cursorId,
50+
String keyword) {
51+
BooleanBuilder builder = getBooleanBuilder(isFollowTarget, userId, cursorId, keyword);
52+
53+
NumberPath<Long> numberPath = getNumberPath(isFollowTarget);
4554

4655
return from(follow)
56+
.innerJoin(user)
57+
.on(user.userId.eq(numberPath))
4758
.select(Projections.constructor(UserThumbnailResponseDto.class,
48-
getNumberPath(!isFollowerQuery),
59+
numberPath,
4960
user.nickname,
5061
user.profileImage))
5162
.where(builder)
@@ -54,16 +65,18 @@ private List<UserThumbnailResponseDto> getContent(boolean isFollowerQuery, Long
5465
}
5566

5667
//내 팔로워 아이디 슬라이스
57-
public Slice<UserThumbnailResponseDto> getFollowerSliceByUserId(Long userId, Long cursorId, Pageable pageable) {
58-
boolean isFollowerQuery = true;
59-
List<UserThumbnailResponseDto> content = getContent(isFollowerQuery, userId, cursorId);
68+
public Slice<UserThumbnailResponseDto> getFollowerSliceByUserId(Long userId, Long cursorId, String keyword,
69+
Pageable pageable) {
70+
boolean isFollowTarget = true;
71+
List<UserThumbnailResponseDto> content = getContent(isFollowTarget, userId, cursorId, keyword);
6072
return PageableUtil.checkAndCreateSlice(content, pageable);
6173
}
6274

6375
// 내가 팔로잉하는 아이디 슬라이스
64-
public Slice<UserThumbnailResponseDto> getFollowingSliceByUserId(Long userId, Long cursorId, Pageable pageable) {
65-
boolean isFollowerQuery = false;
66-
List<UserThumbnailResponseDto> content = getContent(isFollowerQuery, userId, cursorId);
76+
public Slice<UserThumbnailResponseDto> getFollowingSliceByUserId(Long userId, Long cursorId, String keyword,
77+
Pageable pageable) {
78+
boolean isFollowTarget = false;
79+
List<UserThumbnailResponseDto> content = getContent(isFollowTarget, userId, cursorId, keyword);
6780
return PageableUtil.checkAndCreateSlice(content, pageable);
6881
}
69-
}
82+
}

src/main/java/com/example/log4u/domain/supports/controller/SupportController.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example.log4u.domain.supports.controller;
22

3-
import org.springframework.data.domain.Page;
43
import org.springframework.http.HttpStatus;
54
import org.springframework.http.ResponseEntity;
65
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@@ -12,6 +11,7 @@
1211
import org.springframework.web.bind.annotation.RequestParam;
1312
import org.springframework.web.bind.annotation.RestController;
1413

14+
import com.example.log4u.common.dto.PageResponse;
1515
import com.example.log4u.common.oauth2.dto.CustomOAuth2User;
1616
import com.example.log4u.domain.supports.dto.SupportCreateRequestDto;
1717
import com.example.log4u.domain.supports.dto.SupportGetResponseDto;
@@ -39,13 +39,14 @@ public ResponseEntity<Void> createSupport(
3939
}
4040

4141
@GetMapping
42-
public ResponseEntity<Page<SupportOverviewGetResponseDto>> getSupportOverviewPage(
42+
public ResponseEntity<PageResponse<SupportOverviewGetResponseDto>> getSupportOverviewPage(
4343
@AuthenticationPrincipal CustomOAuth2User customOAuth2User,
4444
@RequestParam(defaultValue = "1") int page,
4545
@RequestParam(required = false) SupportType supportType
4646
) {
4747
long requesterId = customOAuth2User.getUserId();
48-
Page<SupportOverviewGetResponseDto> supportOverviewPage = supportService.getSupportPage(requesterId, page,
48+
PageResponse<SupportOverviewGetResponseDto> supportOverviewPage = supportService.getSupportPage(requesterId,
49+
page,
4950
supportType);
5051
return ResponseEntity.ok().body(supportOverviewPage);
5152
}

src/main/java/com/example/log4u/domain/supports/service/SupportService.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.example.log4u.domain.supports.service;
22

3-
import org.springframework.data.domain.Page;
43
import org.springframework.data.domain.PageRequest;
54
import org.springframework.data.domain.Pageable;
65
import org.springframework.stereotype.Service;
76
import org.springframework.transaction.annotation.Transactional;
87

8+
import com.example.log4u.common.dto.PageResponse;
99
import com.example.log4u.domain.supports.dto.SupportCreateRequestDto;
1010
import com.example.log4u.domain.supports.dto.SupportGetResponseDto;
1111
import com.example.log4u.domain.supports.dto.SupportOverviewGetResponseDto;
@@ -31,13 +31,14 @@ public void createSupport(
3131
}
3232

3333
@Transactional(readOnly = true)
34-
public Page<SupportOverviewGetResponseDto> getSupportPage(
34+
public PageResponse<SupportOverviewGetResponseDto> getSupportPage(
3535
long requesterId,
3636
int page,
3737
SupportType supportType
3838
) {
3939
Pageable pageable = PageRequest.of(page - 1, 10);
40-
return supportQuerydsl.getSupportOverviewGetResponseDtoPage(requesterId, pageable, supportType);
40+
return PageResponse.of(
41+
supportQuerydsl.getSupportOverviewGetResponseDtoPage(requesterId, pageable, supportType));
4142
}
4243

4344
@Transactional(readOnly = true)

src/main/java/com/example/log4u/domain/user/mypage/controller/MyPageController.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,22 @@ public ResponseEntity<PageResponse<DiaryResponseDto>> getMyLikesPage(
4343
@GetMapping("/users/me/followings")
4444
public ResponseEntity<PageResponse<UserThumbnailResponseDto>> getMyFollowingPage(
4545
@AuthenticationPrincipal CustomOAuth2User customOAuth2User,
46-
@RequestParam(required = false) Long cursorId
46+
@RequestParam(required = false) Long cursorId,
47+
@RequestParam(required = false) String keyword
48+
4749
) {
4850
long userId = customOAuth2User.getUserId();
49-
return ResponseEntity.ok(myPageService.getMyFollowings(userId, cursorId));
51+
return ResponseEntity.ok(myPageService.getMyFollowings(userId, cursorId, keyword));
5052
}
5153

5254
@GetMapping("/users/me/followers")
5355
public ResponseEntity<PageResponse<UserThumbnailResponseDto>> getMyFollowerPage(
5456
@AuthenticationPrincipal CustomOAuth2User customOAuth2User,
55-
@RequestParam(required = false) Long cursorId
57+
@RequestParam(required = false) Long cursorId,
58+
@RequestParam(required = false) String keyword
5659
) {
5760
long userId = customOAuth2User.getUserId();
58-
return ResponseEntity.ok(myPageService.getMyFollowers(userId, cursorId));
61+
return ResponseEntity.ok(myPageService.getMyFollowers(userId, cursorId, keyword));
5962
}
6063

6164
@GetMapping("/users/me/subscriptions")

src/main/java/com/example/log4u/domain/user/mypage/service/MyPageService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,11 @@ public PageResponse<DiaryResponseDto> getLikeDiariesByCursor(Long userId, Long c
4444
}
4545

4646
@Transactional(readOnly = true)
47-
public PageResponse<UserThumbnailResponseDto> getMyFollowers(Long userId, Long cursorId) {
47+
public PageResponse<UserThumbnailResponseDto> getMyFollowers(Long userId, Long cursorId, String keyword) {
4848
Slice<UserThumbnailResponseDto> slice = followQuerydsl.getFollowerSliceByUserId(
4949
userId,
5050
cursorId,
51+
keyword,
5152
PageRequest.of(0, defaultPageSize));
5253

5354
Long nextCursor = !slice.isEmpty() ? slice.getContent().getLast().userId() : null;
@@ -56,10 +57,11 @@ public PageResponse<UserThumbnailResponseDto> getMyFollowers(Long userId, Long c
5657
}
5758

5859
@Transactional(readOnly = true)
59-
public PageResponse<UserThumbnailResponseDto> getMyFollowings(Long userId, Long cursorId) {
60+
public PageResponse<UserThumbnailResponseDto> getMyFollowings(Long userId, Long cursorId, String keyword) {
6061
Slice<UserThumbnailResponseDto> slice = followQuerydsl.getFollowingSliceByUserId(
6162
userId,
6263
cursorId,
64+
keyword,
6365
PageRequest.of(0, defaultPageSize));
6466

6567
Long nextCursor = !slice.isEmpty() ? slice.getContent().getLast().userId() : null;

src/test/java/com/example/log4u/domain/support/service/SupportServiceTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.springframework.data.domain.PageImpl;
1616
import org.springframework.data.domain.PageRequest;
1717

18+
import com.example.log4u.common.dto.PageResponse;
1819
import com.example.log4u.domain.supports.dto.SupportCreateRequestDto;
1920
import com.example.log4u.domain.supports.dto.SupportGetResponseDto;
2021
import com.example.log4u.domain.supports.dto.SupportOverviewGetResponseDto;
@@ -62,10 +63,10 @@ void testGetSupportPage() {
6263
given(supportQuerydsl.getSupportOverviewGetResponseDtoPage(requesterId, pageable, supportType))
6364
.willReturn(supportPage);
6465

65-
Page<SupportOverviewGetResponseDto> result = supportService.getSupportPage(requesterId, 1, supportType);
66+
PageResponse<SupportOverviewGetResponseDto> result = supportService.getSupportPage(requesterId, 1, supportType);
6667

6768
assertNotNull(result);
68-
assertEquals(1, result.getTotalElements());
69+
assertEquals(1, result.pageInfo().totalElements());
6970
}
7071

7172
@DisplayName("성공 테스트 : 특정 문의 상세 조회")

src/test/java/com/example/log4u/domain/user/mypage/service/MyPageServiceTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,10 @@ void getLikeDiariesByCursor_returnsCorrectData() {
9494
void getMyFollowers_returnsCorrectData() {
9595
var slice = new SliceImpl<>(List.of(new UserThumbnailResponseDto(userId, "nick", "image")));
9696

97-
when(followQuerydsl.getFollowerSliceByUserId(eq(userId), eq(cursorId), any(PageRequest.class)))
97+
when(followQuerydsl.getFollowerSliceByUserId(eq(userId), eq(cursorId), any(), any(PageRequest.class)))
9898
.thenReturn(slice);
9999

100-
PageResponse<UserThumbnailResponseDto> result = myPageService.getMyFollowers(userId, cursorId);
100+
PageResponse<UserThumbnailResponseDto> result = myPageService.getMyFollowers(userId, cursorId, null);
101101

102102
assertThat(result).isNotNull();
103103
}
@@ -107,10 +107,10 @@ void getMyFollowers_returnsCorrectData() {
107107
void getMyFollowings_returnsCorrectData() {
108108
var slice = new SliceImpl<>(List.of(new UserThumbnailResponseDto(userId, "nick", "image")));
109109

110-
when(followQuerydsl.getFollowingSliceByUserId(eq(userId), eq(cursorId), any(PageRequest.class)))
110+
when(followQuerydsl.getFollowingSliceByUserId(eq(userId), eq(cursorId), any(), any(PageRequest.class)))
111111
.thenReturn(slice);
112112

113-
PageResponse<UserThumbnailResponseDto> result = myPageService.getMyFollowings(userId, cursorId);
113+
PageResponse<UserThumbnailResponseDto> result = myPageService.getMyFollowings(userId, cursorId, null);
114114

115115
assertThat(result).isNotNull();
116116
}

0 commit comments

Comments
 (0)