Skip to content

Commit 7831761

Browse files
committed
Ref: post 도메인 리팩토링
1 parent 93d6e96 commit 7831761

File tree

11 files changed

+137
-117
lines changed

11 files changed

+137
-117
lines changed

src/main/java/com/back/domain/board/post/controller/PostController.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,8 @@ public ResponseEntity<RsData<PostDetailResponse>> getPost(
6565
@PathVariable Long postId,
6666
@AuthenticationPrincipal CustomUserDetails user
6767
) {
68-
PostDetailResponse response = (user != null)
69-
? postService.getPostWithUser(postId, user.getUserId())
70-
: postService.getPost(postId);
68+
Long userId = (user != null) ? user.getUserId() : null;
69+
PostDetailResponse response = postService.getPost(postId, userId);
7170
return ResponseEntity
7271
.status(HttpStatus.OK)
7372
.body(RsData.success(

src/main/java/com/back/domain/board/post/controller/docs/PostCategoryControllerDocs.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public interface PostCategoryControllerDocs {
3232
examples = @ExampleObject(value = """
3333
{
3434
"success": true,
35-
"code": "SUCCESS_201",
35+
"code": "SUCCESS_200",
3636
"message": "카테고리가 생성되었습니다.",
3737
"data": {
3838
"id": 80,

src/main/java/com/back/domain/board/post/controller/docs/PostControllerDocs.java

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -409,10 +409,18 @@ ResponseEntity<RsData<PostDetailResponse>> getPost(
409409
),
410410
@ApiResponse(
411411
responseCode = "404",
412-
description = "존재하지 않는 게시글 또는 카테고리",
412+
description = "존재하지 않는 사용자/게시글/카테고리",
413413
content = @Content(
414414
mediaType = "application/json",
415415
examples = {
416+
@ExampleObject(name = "존재하지 않는 사용자", value = """
417+
{
418+
"success": false,
419+
"code": "USER_001",
420+
"message": "존재하지 않는 사용자입니다.",
421+
"data": null
422+
}
423+
"""),
416424
@ExampleObject(name = "존재하지 않는 게시글", value = """
417425
{
418426
"success": false,
@@ -539,17 +547,27 @@ ResponseEntity<RsData<PostResponse>> updatePost(
539547
),
540548
@ApiResponse(
541549
responseCode = "404",
542-
description = "존재하지 않는 게시글",
550+
description = "존재하지 않는 사용자 또는 게시글",
543551
content = @Content(
544552
mediaType = "application/json",
545-
examples = @ExampleObject(value = """
546-
{
547-
"success": false,
548-
"code": "POST_001",
549-
"message": "존재하지 않는 게시글입니다.",
550-
"data": null
551-
}
552-
""")
553+
examples = {
554+
@ExampleObject(name = "존재하지 않는 사용자", value = """
555+
{
556+
"success": false,
557+
"code": "USER_001",
558+
"message": "존재하지 않는 사용자입니다.",
559+
"data": null
560+
}
561+
"""),
562+
@ExampleObject(name = "존재하지 않는 게시글", value = """
563+
{
564+
"success": false,
565+
"code": "POST_001",
566+
"message": "존재하지 않는 게시글입니다.",
567+
"data": null
568+
}
569+
""")
570+
}
553571
)
554572
),
555573
@ApiResponse(

src/main/java/com/back/domain/board/post/entity/Post.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,9 @@ public List<PostCategory> getCategories() {
159159
.map(PostCategoryMapping::getCategory)
160160
.toList();
161161
}
162+
163+
/** 게시글 삭제 시 연관관계 정리 */
164+
public void remove() {
165+
this.user.removePost(this);
166+
}
162167
}

src/main/java/com/back/domain/board/post/entity/PostBookmark.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,11 @@ public PostBookmark(Post post, User user) {
2929
post.addBookmark(this);
3030
user.addPostBookmark(this);
3131
}
32+
33+
// -------------------- 헬퍼 메서드 --------------------
34+
/** 게시글 북마크 삭제 시 연관관계 정리 */
35+
public void remove() {
36+
this.post.removeBookmark(this);
37+
this.user.removePostBookmark(this);
38+
}
3239
}

src/main/java/com/back/domain/board/post/entity/PostLike.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,11 @@ public PostLike(Post post, User user) {
2929
post.addLike(this);
3030
user.addPostLike(this);
3131
}
32+
33+
// -------------------- 헬퍼 메서드 --------------------
34+
/** 게시글 좋아요 삭제 시 연관관계 정리 */
35+
public void remove() {
36+
this.post.removeLike(this);
37+
this.user.removePostLike(this);
38+
}
3239
}

src/main/java/com/back/domain/board/post/service/PostBookmarkService.java

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@ public class PostBookmarkService {
2323

2424
/**
2525
* 게시글 북마크 서비스
26-
* 1. User 조회
27-
* 2. Post 조회
28-
* 3. 이미 존재하는 경우 예외 처리
29-
* 4. PostBookmark 저장 및 bookmarkCount 증가
30-
* 5. PostBookmarkResponse 반환
26+
*
27+
* @param postId 게시글 ID
28+
* @param userId 사용자 ID
29+
* @return 게시글 북마크 응답 DTO
3130
*/
3231
public PostBookmarkResponse bookmarkPost(Long postId, Long userId) {
3332
// User 조회
@@ -43,21 +42,19 @@ public PostBookmarkResponse bookmarkPost(Long postId, Long userId) {
4342
throw new CustomException(ErrorCode.BOOKMARK_ALREADY_EXISTS);
4443
}
4544

46-
// 북마크 수 증가
45+
// PostBookmark 저장 및 북마크 수 증가 처리
4746
post.increaseBookmarkCount();
48-
49-
// PostBookmark 저장 및 응답 반환
5047
postBookmarkRepository.save(new PostBookmark(post, user));
48+
5149
return PostBookmarkResponse.from(post);
5250
}
5351

5452
/**
5553
* 게시글 북마크 취소 서비스
56-
* 1. User 조회
57-
* 2. Post 조회
58-
* 3. PostBookmark 조회
59-
* 4. PostBookmark 삭제 및 bookmarkCount 감소
60-
* 5. PostBookmarkResponse 반환
54+
*
55+
* @param postId 게시글 ID
56+
* @param userId 사용자 ID
57+
* @return 게시글 북마크 응답 DTO
6158
*/
6259
public PostBookmarkResponse cancelBookmarkPost(Long postId, Long userId) {
6360
// User 조회
@@ -72,17 +69,11 @@ public PostBookmarkResponse cancelBookmarkPost(Long postId, Long userId) {
7269
PostBookmark postBookmark = postBookmarkRepository.findByUserIdAndPostId(userId, postId)
7370
.orElseThrow(() -> new CustomException(ErrorCode.BOOKMARK_NOT_FOUND));
7471

75-
// 연관관계 제거
76-
post.removeBookmark(postBookmark);
77-
user.removePostBookmark(postBookmark);
78-
79-
// PostBookmark 삭제
72+
// PostBookmark 삭제 및 북마크 수 감소 처리
73+
postBookmark.remove();
8074
postBookmarkRepository.delete(postBookmark);
81-
82-
// 북마크 수 감소
8375
post.decreaseBookmarkCount();
8476

85-
// 응답 반환
8677
return PostBookmarkResponse.from(post);
8778
}
8879
}

src/main/java/com/back/domain/board/post/service/PostCategoryService.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,12 @@ public class PostCategoryService {
2323

2424
/**
2525
* 카테고리 생성 서비스
26-
* 1. User 조회
27-
* 2. 이미 존재하는 경우 예외
28-
* 3. PostCategory 생성
29-
* 4. PostCategory 저장 및 CategoryResponse 반환
26+
*
27+
* @param request 카테고리 생성 요청 본문
28+
* @param userId 사용자 ID
29+
* @return 생성된 카테고리 응답 DTO
3030
*/
3131
public CategoryResponse createCategory(CategoryRequest request, Long userId) {
32-
3332
// User 조회
3433
User user = userRepository.findById(userId)
3534
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));
@@ -41,16 +40,15 @@ public CategoryResponse createCategory(CategoryRequest request, Long userId) {
4140

4241
// PostCategory 생성
4342
PostCategory category = new PostCategory(request.name(), request.type());
44-
45-
// PostCategory 저장 및 응답 반환
4643
PostCategory saved = postCategoryRepository.save(category);
44+
4745
return CategoryResponse.from(saved);
4846
}
4947

5048
/**
5149
* 카테고리 전체 조회 서비스
52-
* 1. PostCategory 전체 조회
53-
* 2. List<CategoryResponse> 반환
50+
*
51+
* @return 카테고리 응답 DTO 리스트
5452
*/
5553
@Transactional(readOnly = true)
5654
public List<CategoryResponse> getAllCategories() {

src/main/java/com/back/domain/board/post/service/PostLikeService.java

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,11 @@ public class PostLikeService {
2525
private final ApplicationEventPublisher eventPublisher;
2626

2727
/**
28-
* 게시글 좋아요 서비스
29-
* 1. User 조회
30-
* 2. Post 조회
31-
* 3. 이미 존재하는 경우 예외 처리
32-
* 4. PostLike 저장 및 likeCount 증가
33-
* 5. 알림 이벤트 발행 (자기 글이 아닐 경우)
34-
* 6. PostLikeResponse 반환
28+
* 게시글 좋아요 생성 서비스
29+
*
30+
* @param postId 게시글 ID
31+
* @param userId 사용자 ID
32+
* @return 게시글 좋아요 응답 DTO
3533
*/
3634
public PostLikeResponse likePost(Long postId, Long userId) {
3735
// User 조회
@@ -42,22 +40,20 @@ public PostLikeResponse likePost(Long postId, Long userId) {
4240
Post post = postRepository.findById(postId)
4341
.orElseThrow(() -> new CustomException(ErrorCode.POST_NOT_FOUND));
4442

45-
// 이미 좋아요를 누른 경우 예외
43+
// 이미 좋아요한 경우 예외
4644
if (postLikeRepository.existsByUserIdAndPostId(userId, postId)) {
4745
throw new CustomException(ErrorCode.POST_ALREADY_LIKED);
4846
}
4947

50-
// 좋아요 수 증가
48+
// PostLike 저장 및 좋아요 수 증가 처리
5149
post.increaseLikeCount();
52-
53-
// PostLike 저장 및 응답 반환
5450
postLikeRepository.save(new PostLike(post, user));
5551

56-
// 알림 이벤트 발행 (자기 자신의 글이 아닐 때만)
52+
// 게시글 좋아요 이벤트 발행 (자기 자신의 글이 아닐 때만)
5753
if (!post.getUser().getId().equals(userId)) {
5854
eventPublisher.publishEvent(
5955
new PostLikedEvent(
60-
userId, // 좋아요 누른 사람
56+
userId, // 좋아요한 사용자
6157
post.getUser().getId(), // 게시글 작성자
6258
post.getId(),
6359
post.getTitle()
@@ -69,12 +65,11 @@ public PostLikeResponse likePost(Long postId, Long userId) {
6965
}
7066

7167
/**
72-
* 게시글 좋아요 취소 서비스
73-
* 1. User 조회
74-
* 2. Post 조회
75-
* 3. PostLike 조회
76-
* 4. PostLike 삭제 및 likeCount 감소
77-
* 5. PostLikeResponse 반환
68+
* 게시글 좋아요 삭제 서비스
69+
*
70+
* @param postId 게시글 ID
71+
* @param userId 사용자 ID
72+
* @return 게시글 좋아요 응답 DTO
7873
*/
7974
public PostLikeResponse cancelLikePost(Long postId, Long userId) {
8075
// User 조회
@@ -89,17 +84,11 @@ public PostLikeResponse cancelLikePost(Long postId, Long userId) {
8984
PostLike postLike = postLikeRepository.findByUserIdAndPostId(userId, postId)
9085
.orElseThrow(() -> new CustomException(ErrorCode.POST_LIKE_NOT_FOUND));
9186

92-
// 연관관계 제거
93-
post.removeLike(postLike);
94-
user.removePostLike(postLike);
95-
96-
// PostLike 삭제
87+
// PostLike 삭제 및 좋아요 수 감소 처리
88+
postLike.remove();
9789
postLikeRepository.delete(postLike);
98-
99-
// 좋아요 수 감소
10090
post.decreaseLikeCount();
10191

102-
// 응답 반환
10392
return PostLikeResponse.from(post);
10493
}
10594
}

0 commit comments

Comments
 (0)