Skip to content

Commit 4a40d99

Browse files
authored
Merge pull request #40 from classic-daramg/feature/19
Feature/19: ์œ ์ € ๋ฐ ํฌ์ŠคํŠธ interaction ๊ด€๋ จ ๊ธฐ๋Šฅ ๊ตฌํ˜„
2 parents bdcbc6e + e1654cb commit 4a40d99

File tree

63 files changed

+2034
-263
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2034
-263
lines changed

โ€Žsrc/main/java/com/daramg/server/auth/application/AuthService.javaโ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
import com.daramg.server.auth.exception.AuthErrorStatus;
55
import com.daramg.server.auth.util.JwtUtil;
66
import com.daramg.server.common.exception.BusinessException;
7-
import com.daramg.server.domain.user.domain.User;
7+
import com.daramg.server.user.domain.User;
88
import com.daramg.server.auth.domain.SignupVo;
99
import com.daramg.server.auth.dto.LoginRequestDto;
1010
import com.daramg.server.auth.dto.PasswordRequestDto;
1111
import com.daramg.server.auth.dto.SignupRequestDto;
12-
import com.daramg.server.domain.user.repository.UserRepository;
12+
import com.daramg.server.user.repository.UserRepository;
1313
import lombok.RequiredArgsConstructor;
1414
import org.springframework.beans.factory.annotation.Value;
1515
import org.springframework.data.redis.core.RedisTemplate;

โ€Žsrc/main/java/com/daramg/server/auth/application/MailVerificationServiceImpl.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import com.daramg.server.auth.util.MimeMessageGenerator;
1010
import com.daramg.server.auth.util.VerificationCodeGenerator;
1111
import com.daramg.server.common.exception.BusinessException;
12-
import com.daramg.server.domain.user.repository.UserRepository;
12+
import com.daramg.server.user.repository.UserRepository;
1313
import jakarta.mail.MessagingException;
1414
import jakarta.mail.internet.MimeMessage;
1515
import lombok.RequiredArgsConstructor;

โ€Žsrc/main/java/com/daramg/server/auth/filter/JwtAuthorizationFilter.javaโ€Ž

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import com.daramg.server.auth.util.CookieUtil;
55
import com.daramg.server.auth.util.JwtUtil;
66
import com.daramg.server.common.exception.BusinessException;
7-
import com.daramg.server.common.exception.UnauthorizedException;
8-
import com.daramg.server.domain.user.domain.User;
7+
import com.daramg.server.user.domain.User;
98
import jakarta.servlet.FilterChain;
109
import jakarta.servlet.ServletException;
1110
import jakarta.servlet.http.Cookie;

โ€Žsrc/main/java/com/daramg/server/auth/presentation/AuthController.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import com.daramg.server.auth.exception.AuthErrorStatus;
77
import com.daramg.server.auth.util.CookieUtil;
88
import com.daramg.server.common.exception.BusinessException;
9-
import com.daramg.server.domain.user.domain.User;
9+
import com.daramg.server.user.domain.User;
1010
import jakarta.servlet.http.Cookie;
1111
import jakarta.servlet.http.HttpServletRequest;
1212
import jakarta.servlet.http.HttpServletResponse;

โ€Žsrc/main/java/com/daramg/server/auth/resolver/AuthUserResolver.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.daramg.server.auth.exception.AuthErrorStatus;
44
import com.daramg.server.common.exception.BusinessException;
5-
import com.daramg.server.domain.user.domain.User;
5+
import com.daramg.server.user.domain.User;
66
import lombok.RequiredArgsConstructor;
77
import org.jetbrains.annotations.NotNull;
88
import org.springframework.core.MethodParameter;

โ€Žsrc/main/java/com/daramg/server/auth/util/JwtUtil.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.daramg.server.auth.dto.TokenResponseDto;
1111
import com.daramg.server.auth.exception.AuthErrorStatus;
1212
import com.daramg.server.common.exception.BusinessException;
13-
import com.daramg.server.domain.user.domain.User;
13+
import com.daramg.server.user.domain.User;
1414
import lombok.RequiredArgsConstructor;
1515
import org.springframework.beans.factory.annotation.Value;
1616
import org.springframework.stereotype.Component;
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package com.daramg.server.comment.application;
2+
3+
import com.daramg.server.comment.domain.Comment;
4+
import com.daramg.server.comment.domain.CommentLike;
5+
import com.daramg.server.comment.dto.CommentLikeResponseDto;
6+
import com.daramg.server.comment.repository.CommentLikeRepository;
7+
import com.daramg.server.comment.repository.CommentRepository;
8+
import com.daramg.server.common.application.EntityUtils;
9+
import com.daramg.server.common.exception.BusinessException;
10+
import com.daramg.server.post.domain.Post;
11+
import com.daramg.server.post.dto.CommentCreateDto;
12+
import com.daramg.server.post.dto.CommentReplyCreateDto;
13+
import com.daramg.server.user.domain.User;
14+
import lombok.RequiredArgsConstructor;
15+
import org.springframework.stereotype.Service;
16+
import org.springframework.transaction.annotation.Transactional;
17+
18+
@Service
19+
@Transactional
20+
@RequiredArgsConstructor
21+
public class CommentService {
22+
23+
private final EntityUtils entityUtils;
24+
private final CommentRepository commentRepository;
25+
private final CommentLikeRepository commentLikeRepository;
26+
27+
public void createComment(Long postId, CommentCreateDto request, User user){
28+
Post post = entityUtils.getEntity(postId, Post.class);
29+
if (post.isBlocked()){
30+
throw new BusinessException("๋ธ”๋ฝ๋œ ํฌ์ŠคํŠธ์—๋Š” ๋Œ“๊ธ€์„ ๋‚จ๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
31+
}
32+
33+
Comment comment = Comment.of(
34+
post,
35+
user,
36+
request.getContent(),
37+
null
38+
);
39+
40+
commentRepository.save(comment);
41+
post.incrementCommentCount();
42+
}
43+
44+
public void createReply(Long commentId, CommentReplyCreateDto request, User user){
45+
Comment parentComment = entityUtils.getEntity(commentId, Comment.class);
46+
if (parentComment.isDeleted() || parentComment.isBlocked()){
47+
throw new BusinessException("์‚ญ์ œ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ธ”๋ฝ๋œ ๋Œ“๊ธ€์—๋Š” ๋Œ€๋Œ“๊ธ€์„ ๋‚จ๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
48+
}
49+
Post post = parentComment.getPost();
50+
if (post.isBlocked()){
51+
throw new BusinessException("๋ธ”๋ฝ๋œ ํฌ์ŠคํŠธ์—๋Š” ๋Œ“๊ธ€์„ ๋‚จ๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
52+
}
53+
54+
Comment reply = Comment.of(
55+
post,
56+
user,
57+
request.getContent(),
58+
parentComment
59+
);
60+
61+
commentRepository.save(reply);
62+
post.incrementCommentCount();
63+
}
64+
65+
public CommentLikeResponseDto toggleCommentLike(Long commentId, User user){
66+
Comment comment = entityUtils.getEntity(commentId, Comment.class);
67+
if (comment.isDeleted() || comment.isBlocked()){
68+
throw new BusinessException("์‚ญ์ œ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ธ”๋ฝ๋œ ๋Œ“๊ธ€์—๋Š” ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
69+
}
70+
71+
boolean alreadyLiked = commentLikeRepository
72+
.existsByCommentIdAndUserId(commentId, user.getId());
73+
74+
if (alreadyLiked) {
75+
commentLikeRepository.deleteByCommentIdAndUserId(commentId, user.getId());
76+
comment.decrementLikeCount();
77+
return new CommentLikeResponseDto(false, comment.getLikeCount());
78+
}
79+
80+
commentLikeRepository.save(CommentLike.of(comment, user));
81+
comment.incrementLikeCount();
82+
return new CommentLikeResponseDto(true, comment.getLikeCount());
83+
}
84+
85+
public void deleteComment(Long commentId, User user){
86+
Comment comment = entityUtils.getEntity(commentId, Comment.class);
87+
88+
if (comment.isDeleted()){
89+
throw new BusinessException("์ด๋ฏธ ์‚ญ์ œ ์ฒ˜๋ฆฌ๋œ ๋Œ“๊ธ€์ž…๋‹ˆ๋‹ค.");
90+
}
91+
if (comment.getUser() == null || !comment.getUser().getId().equals(user.getId())){
92+
throw new BusinessException("๋Œ“๊ธ€์„ ์ž‘์„ฑํ•œ ์œ ์ €๋งŒ ๋Œ“๊ธ€์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.");
93+
}
94+
95+
comment.softDelete();
96+
commentLikeRepository.deleteAllByCommentId(commentId);
97+
comment.resetLikeCount();
98+
}
99+
}

src/main/java/com/daramg/server/domain/interaction/Comment.java renamed to src/main/java/com/daramg/server/comment/domain/Comment.java

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
package com.daramg.server.domain.interaction;
1+
package com.daramg.server.comment.domain;
22

33
import com.daramg.server.common.domain.BaseEntity;
4-
import com.daramg.server.domain.post.domain.Post;
5-
import com.daramg.server.domain.user.domain.User;
4+
import com.daramg.server.post.domain.Post;
5+
import com.daramg.server.user.domain.User;
66
import jakarta.persistence.*;
77
import lombok.AccessLevel;
8-
import lombok.Builder;
98
import lombok.Getter;
109
import lombok.NoArgsConstructor;
1110
import org.springframework.lang.NonNull;
@@ -27,8 +26,14 @@ public class Comment extends BaseEntity<Comment> {
2726
@JoinColumn(name = "user_id", nullable = false)
2827
private User user;
2928

29+
@Column(name = "content", nullable = false, length = 500)
30+
private String content;
31+
32+
@Column(name = "is_deleted", nullable = false)
33+
private boolean isDeleted = false;
34+
3035
@ManyToOne(fetch = FetchType.LAZY)
31-
@JoinColumn(name = "parent_comment_id")
36+
@JoinColumn(name = "parent_comment_id", nullable = true)
3237
private Comment parentComment;
3338

3439
@OneToMany(mappedBy = "parentComment", cascade = CascadeType.ALL, orphanRemoval = true)
@@ -40,10 +45,35 @@ public class Comment extends BaseEntity<Comment> {
4045
@Column(name = "is_blocked", nullable = false)
4146
private boolean isBlocked = false;
4247

43-
@Builder
44-
public Comment(@NonNull Post post, @NonNull User user, Comment parentComment) {
48+
private Comment(Post post, User user, String content, Comment parentComment) {
4549
this.post = post;
4650
this.user = user;
51+
this.content = content;
4752
this.parentComment = parentComment;
4853
}
54+
55+
public static Comment of(@NonNull Post post,
56+
@NonNull User user,
57+
@NonNull String content,
58+
Comment parentComment) {
59+
return new Comment(post, user, content, parentComment);
60+
}
61+
62+
public void incrementLikeCount() {
63+
likeCount++;
64+
}
65+
66+
public void decrementLikeCount() {
67+
if(likeCount > 0){
68+
likeCount--;
69+
}
70+
}
71+
72+
public void softDelete() {
73+
this.isDeleted = true;
74+
}
75+
76+
public void resetLikeCount() {
77+
this.likeCount = 0;
78+
}
4979
}

src/main/java/com/daramg/server/domain/interaction/CommentLike.java renamed to src/main/java/com/daramg/server/comment/domain/CommentLike.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.daramg.server.domain.interaction;
1+
package com.daramg.server.comment.domain;
22

33
import com.daramg.server.common.domain.BaseEntity;
4-
import com.daramg.server.domain.user.domain.User;
4+
import com.daramg.server.user.domain.User;
55
import jakarta.persistence.*;
66
import lombok.AccessLevel;
77
import lombok.Builder;
@@ -29,9 +29,12 @@ public class CommentLike extends BaseEntity<CommentLike> {
2929
@JoinColumn(name = "user_id", nullable = false)
3030
private User user;
3131

32-
@Builder
33-
public CommentLike(@NonNull Comment comment, @NonNull User user) {
32+
private CommentLike(@NonNull Comment comment, @NonNull User user) {
3433
this.comment = comment;
3534
this.user = user;
3635
}
36+
37+
public static CommentLike of(Comment comment, User user) {
38+
return new CommentLike(comment, user);
39+
}
3740
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.daramg.server.comment.dto
2+
3+
data class CommentLikeResponseDto(
4+
val isLiked: Boolean,
5+
val likeCount: Int
6+
)

0 commit comments

Comments
ย (0)