Skip to content

Commit 5c39344

Browse files
authored
Merge pull request #177 from SEMOSAN/refactor/#172-user-reader-pattern
[Refactor] UserReader를 통한 유저 조회 통일
2 parents 187bdb6 + 716de06 commit 5c39344

7 files changed

Lines changed: 28 additions & 38 deletions

File tree

src/main/java/com/semosan/api/domain/community/comment/service/CommentService.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.semosan.api.domain.community.post.repository.PostRepository;
1111
import com.semosan.api.domain.user.repository.UserBlockRepository;
1212
import com.semosan.api.domain.user.entity.User;
13-
import com.semosan.api.domain.user.repository.UserRepository;
13+
import com.semosan.api.domain.user.service.UserReader;
1414
import lombok.RequiredArgsConstructor;
1515
import org.springframework.data.domain.Page;
1616
import org.springframework.data.domain.Pageable;
@@ -28,14 +28,14 @@ public class CommentService {
2828

2929
private final CommentRepository commentRepository;
3030
private final PostRepository postRepository;
31-
private final UserRepository userRepository;
31+
private final UserReader userReader;
3232
private final UserBlockRepository userBlockRepository;
3333
private final CommunityNotificationService communityNotificationService;
3434

3535
@Transactional
3636
public Comment create(Long postId, Long authorId, String content) {
3737
Post post = findPostOrThrow(postId);
38-
User author = findUserOrThrow(authorId);
38+
User author = userReader.findActiveUserById(authorId);
3939

4040
Comment comment = Comment.create(post, author, content);
4141
Comment savedComment = commentRepository.save(comment);
@@ -46,7 +46,7 @@ public Comment create(Long postId, Long authorId, String content) {
4646
@Transactional
4747
public Comment reply(Long postId, Long authorId, Long parentId, Long mentionedUserId, String content) {
4848
Post post = findPostOrThrow(postId);
49-
User author = findUserOrThrow(authorId);
49+
User author = userReader.findActiveUserById(authorId);
5050
Comment requestedParent = findActiveCommentOrThrow(parentId);
5151

5252
if (!requestedParent.getPost().getId().equals(postId)) {
@@ -56,7 +56,7 @@ public Comment reply(Long postId, Long authorId, Long parentId, Long mentionedUs
5656
// 대댓글에 답글을 달면 트리 깊이를 2로 유지하기 위해 1뎁스 댓글로 정규화
5757
Comment actualParent = requestedParent.isReply() ? requestedParent.getParent() : requestedParent;
5858

59-
User mentionedUser = mentionedUserId != null ? findUserOrThrow(mentionedUserId) : null;
59+
User mentionedUser = mentionedUserId != null ? userReader.findActiveUserById(mentionedUserId) : null;
6060

6161
Comment reply = Comment.reply(post, author, actualParent, mentionedUser, content);
6262
Comment savedReply = commentRepository.save(reply);
@@ -98,11 +98,6 @@ private Post findPostOrThrow(Long postId) {
9898
.orElseThrow(() -> new GeneralException(ErrorStatus.POST_NOT_FOUND));
9999
}
100100

101-
private User findUserOrThrow(Long userId) {
102-
return userRepository.findById(userId)
103-
.orElseThrow(() -> new GeneralException(ErrorStatus.USER_NOT_FOUND));
104-
}
105-
106101
private Comment findActiveCommentOrThrow(Long commentId) {
107102
return commentRepository.findByIdAndDeletedFalse(commentId)
108103
.orElseThrow(() -> new GeneralException(ErrorStatus.COMMENT_NOT_FOUND));

src/main/java/com/semosan/api/domain/community/like/service/PostLikeService.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import com.semosan.api.domain.community.post.entity.Post;
1010
import com.semosan.api.domain.community.post.repository.PostRepository;
1111
import com.semosan.api.domain.user.entity.User;
12-
import com.semosan.api.domain.user.repository.UserRepository;
12+
import com.semosan.api.domain.user.service.UserReader;
1313
import lombok.RequiredArgsConstructor;
1414
import lombok.extern.slf4j.Slf4j;
1515
import org.springframework.dao.DataIntegrityViolationException;
@@ -26,7 +26,7 @@ public class PostLikeService {
2626

2727
private final PostLikeRepository postLikeRepository;
2828
private final PostRepository postRepository;
29-
private final UserRepository userRepository;
29+
private final UserReader userReader;
3030
private final CommunityNotificationService communityNotificationService;
3131

3232
/**
@@ -76,7 +76,6 @@ private Post findPostOrThrow(Long postId) {
7676
}
7777

7878
private User findUserOrThrow(Long userId) {
79-
return userRepository.findById(userId)
80-
.orElseThrow(() -> new GeneralException(ErrorStatus.USER_NOT_FOUND));
79+
return userReader.findActiveUserById(userId);
8180
}
8281
}

src/main/java/com/semosan/api/domain/community/post/service/FreePostService.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import com.semosan.api.domain.community.post.repository.PostImageRepository;
1313
import com.semosan.api.domain.user.repository.UserBlockRepository;
1414
import com.semosan.api.domain.user.entity.User;
15-
import com.semosan.api.domain.user.repository.UserRepository;
15+
import com.semosan.api.domain.user.service.UserReader;
1616
import lombok.RequiredArgsConstructor;
1717
import org.springframework.data.domain.Page;
1818
import org.springframework.data.domain.PageRequest;
@@ -34,7 +34,7 @@ public class FreePostService {
3434
private final PostLikeRepository postLikeRepository;
3535
private final CommentRepository commentRepository;
3636
private final UserBlockRepository userBlockRepository;
37-
private final UserRepository userRepository;
37+
private final UserReader userReader;
3838

3939
@Transactional
4040
public FreePostDetailResponse create(
@@ -47,8 +47,7 @@ public FreePostDetailResponse create(
4747
if (content == null || content.isBlank()) {
4848
throw new GeneralException(ErrorStatus.POST_CONTENT_REQUIRED);
4949
}
50-
User author = userRepository.findById(authorId)
51-
.orElseThrow(() -> new GeneralException(ErrorStatus.USER_NOT_FOUND));
50+
User author = userReader.findActiveUserById(authorId);
5251

5352
FreePost post = FreePost.create(author, title, content);
5453
freePostRepository.save(post);
@@ -71,8 +70,7 @@ public Page<FreePostListResponse> search(Long viewerId, String keyword, Pageable
7170
}
7271

7372
public Page<FreePostListResponse> getMyList(Long authorId, Pageable pageable) {
74-
User author = userRepository.findById(authorId)
75-
.orElseThrow(() -> new GeneralException(ErrorStatus.USER_NOT_FOUND));
73+
User author = userReader.findActiveUserById(authorId);
7674
return enrichWithCounts(freePostRepository.findByAuthorAndDeletedFalse(author, pageable));
7775
}
7876

src/main/java/com/semosan/api/domain/community/post/service/RecordPostService.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.semosan.api.domain.hiking.repository.HikingMemberRepository;
99
import com.semosan.api.domain.hiking.repository.HikingRecordRepository;
1010
import com.semosan.api.domain.user.entity.User;
11-
import com.semosan.api.domain.user.repository.UserRepository;
11+
import com.semosan.api.domain.user.service.UserReader;
1212
import lombok.RequiredArgsConstructor;
1313
import org.springframework.data.domain.Page;
1414
import org.springframework.data.domain.Pageable;
@@ -23,12 +23,11 @@ public class RecordPostService {
2323
private final RecordPostRepository recordPostRepository;
2424
private final HikingRecordRepository hikingRecordRepository;
2525
private final HikingMemberRepository hikingMemberRepository;
26-
private final UserRepository userRepository;
26+
private final UserReader userReader;
2727

2828
@Transactional
2929
public RecordPost create(Long authorId, Long hikingRecordId, String content) {
30-
User author = userRepository.findById(authorId)
31-
.orElseThrow(() -> new GeneralException(ErrorStatus.USER_NOT_FOUND));
30+
User author = userReader.findActiveUserById(authorId);
3231
HikingRecord hikingRecord = hikingRecordRepository.findById(hikingRecordId)
3332
.orElseThrow(() -> new GeneralException(ErrorStatus.HIKING_RECORD_NOT_FOUND));
3433

@@ -45,8 +44,7 @@ public Page<RecordPost> getList(Pageable pageable) {
4544
}
4645

4746
public Page<RecordPost> getMyList(Long authorId, Pageable pageable) {
48-
User author = userRepository.findById(authorId)
49-
.orElseThrow(() -> new GeneralException(ErrorStatus.USER_NOT_FOUND));
47+
User author = userReader.findActiveUserById(authorId);
5048
return recordPostRepository.findByAuthorAndDeletedFalse(author, pageable);
5149
}
5250

src/test/java/com/semosan/api/domain/community/comment/service/CommentServiceTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.semosan.api.domain.user.entity.User;
99
import com.semosan.api.domain.user.enums.user.DeviceType;
1010
import com.semosan.api.domain.user.repository.UserBlockRepository;
11-
import com.semosan.api.domain.user.repository.UserRepository;
11+
import com.semosan.api.domain.user.service.UserReader;
1212
import org.junit.jupiter.api.Test;
1313
import org.junit.jupiter.api.extension.ExtendWith;
1414
import org.mockito.InjectMocks;
@@ -34,7 +34,7 @@ class CommentServiceTest {
3434
private PostRepository postRepository;
3535

3636
@Mock
37-
private UserRepository userRepository;
37+
private UserReader userReader;
3838

3939
@Mock
4040
private UserBlockRepository userBlockRepository;
@@ -52,7 +52,7 @@ void createSavesCommentAndDelegatesNotification() throws Exception {
5252
FreePost post = freePost(10L, postAuthor, "제목", "본문");
5353

5454
when(postRepository.findById(10L)).thenReturn(Optional.of(post));
55-
when(userRepository.findById(2L)).thenReturn(Optional.of(commentAuthor));
55+
when(userReader.findActiveUserById(2L)).thenReturn(commentAuthor);
5656
when(commentRepository.save(any(Comment.class))).thenAnswer(invocation -> {
5757
Comment comment = invocation.getArgument(0);
5858
ReflectionTestUtils.setField(comment, "id", 100L);
@@ -75,8 +75,8 @@ void replySavesReplyAndDelegatesNotification() throws Exception {
7575
Comment parent = comment(100L, post, parentAuthor, "부모 댓글");
7676

7777
when(postRepository.findById(10L)).thenReturn(Optional.of(post));
78-
when(userRepository.findById(3L)).thenReturn(Optional.of(replyAuthor));
79-
when(userRepository.findById(4L)).thenReturn(Optional.of(mentionedUser));
78+
when(userReader.findActiveUserById(3L)).thenReturn(replyAuthor);
79+
when(userReader.findActiveUserById(4L)).thenReturn(mentionedUser);
8080
when(commentRepository.findByIdAndDeletedFalse(100L)).thenReturn(Optional.of(parent));
8181
when(commentRepository.save(any(Comment.class))).thenAnswer(invocation -> {
8282
Comment comment = invocation.getArgument(0);

src/test/java/com/semosan/api/domain/community/like/service/PostLikeServiceTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.semosan.api.domain.community.post.repository.PostRepository;
99
import com.semosan.api.domain.user.entity.User;
1010
import com.semosan.api.domain.user.enums.user.DeviceType;
11-
import com.semosan.api.domain.user.repository.UserRepository;
11+
import com.semosan.api.domain.user.service.UserReader;
1212
import org.junit.jupiter.api.Test;
1313
import org.junit.jupiter.api.extension.ExtendWith;
1414
import org.mockito.InjectMocks;
@@ -36,7 +36,7 @@ class PostLikeServiceTest {
3636
private PostRepository postRepository;
3737

3838
@Mock
39-
private UserRepository userRepository;
39+
private UserReader userReader;
4040

4141
@Mock
4242
private CommunityNotificationService communityNotificationService;
@@ -51,7 +51,7 @@ void toggleWithCountDelegatesNotificationWhenLikeCreated() throws Exception {
5151
FreePost post = freePost(10L, postAuthor, "제목", "본문");
5252

5353
when(postRepository.findByIdAndDeletedFalse(10L)).thenReturn(Optional.of(post));
54-
when(userRepository.findById(2L)).thenReturn(Optional.of(liker));
54+
when(userReader.findActiveUserById(2L)).thenReturn(liker);
5555
when(postLikeRepository.findByPostAndUser(post, liker)).thenReturn(Optional.empty());
5656
when(postLikeRepository.countByPost(post)).thenReturn(1L);
5757

@@ -70,7 +70,7 @@ void toggleWithCountDoesNotDelegateNotificationWhenUnlike() throws Exception {
7070
PostLike existing = PostLike.create(post, liker);
7171

7272
when(postRepository.findByIdAndDeletedFalse(10L)).thenReturn(Optional.of(post));
73-
when(userRepository.findById(2L)).thenReturn(Optional.of(liker));
73+
when(userReader.findActiveUserById(2L)).thenReturn(liker);
7474
when(postLikeRepository.findByPostAndUser(post, liker)).thenReturn(Optional.of(existing));
7575
when(postLikeRepository.countByPost(post)).thenReturn(0L);
7676

@@ -88,7 +88,7 @@ void toggleWithCountDoesNotDelegateNotificationWhenConcurrentDuplicateDetected()
8888
FreePost post = freePost(10L, postAuthor, "제목", "본문");
8989

9090
when(postRepository.findByIdAndDeletedFalse(10L)).thenReturn(Optional.of(post));
91-
when(userRepository.findById(2L)).thenReturn(Optional.of(liker));
91+
when(userReader.findActiveUserById(2L)).thenReturn(liker);
9292
when(postLikeRepository.findByPostAndUser(post, liker)).thenReturn(Optional.empty());
9393
when(postLikeRepository.save(any(PostLike.class))).thenThrow(new DataIntegrityViolationException("duplicate"));
9494
when(postLikeRepository.countByPost(post)).thenReturn(1L);

src/test/java/com/semosan/api/domain/community/post/service/FreePostServiceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import com.semosan.api.domain.user.entity.User;
1414
import com.semosan.api.domain.user.enums.user.DeviceType;
1515
import com.semosan.api.domain.user.repository.UserBlockRepository;
16-
import com.semosan.api.domain.user.repository.UserRepository;
16+
import com.semosan.api.domain.user.service.UserReader;
1717
import org.junit.jupiter.api.Test;
1818
import org.junit.jupiter.api.extension.ExtendWith;
1919
import org.mockito.InjectMocks;
@@ -55,7 +55,7 @@ class FreePostServiceTest {
5555
private UserBlockRepository userBlockRepository;
5656

5757
@Mock
58-
private UserRepository userRepository;
58+
private UserReader userReader;
5959

6060
@InjectMocks
6161
private FreePostService freePostService;

0 commit comments

Comments
 (0)