diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 2273a1f..645a82f 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,26 +4,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -79,14 +62,12 @@
"assignee": "timingsniper"
}
}
-
-
-
+ {
+ "selectedUrlAndAccountId": {
+ "url": "https://github.com/WooriVeryGood/honeycourses-backend-spring.git",
+ "accountId": "fa668461-63a5-431a-b8af-cda0dcb3c718"
+ }
+}
{
"isMigrated": true
}
@@ -104,119 +85,136 @@
- {
+ "keyToString": {
+ "Gradle.Build honeycourses-backend-spring.executor": "Run",
+ "Gradle.CommentApiTest.addComment.executor": "Run",
+ "Gradle.CommentControllerTest.addComment.executor": "Run",
+ "Gradle.CommentControllerTest.addReply.executor": "Run",
+ "Gradle.CommentControllerTest.deleteComment.executor": "Run",
+ "Gradle.CommentControllerTest.executor": "Run",
+ "Gradle.CommentControllerTest.findAllCommentsByPostId.executor": "Run",
+ "Gradle.CommentControllerTest.updateComment.executor": "Run",
+ "Gradle.CommentControllerTest.updateComment_exception_noAuth.executor": "Run",
+ "Gradle.CommentControllerTest.updateComment_exception_noContent.executor": "Run",
+ "Gradle.CommentCreateServiceTest.addComment.executor": "Run",
+ "Gradle.CommentCreateServiceTest.addReply_exception_depth.executor": "Run",
+ "Gradle.CommentCreateServiceTest.executor": "Run",
+ "Gradle.CommentDeleteServiceTest.deleteComment_keepChildren.executor": "Run",
+ "Gradle.CommentDeleteServiceTest.deleteReply_exception_noAuth.executor": "Run",
+ "Gradle.CommentDeleteServiceTest.executor": "Run",
+ "Gradle.CommentFindServiceTest.executor": "Coverage",
+ "Gradle.CommentFindServiceTest.findAllCommentsByPostId_cannot_only_reply.executor": "Run",
+ "Gradle.CommentFindServiceTest.findAllCommentsByPostId_softRemoved.executor": "Run",
+ "Gradle.CommentLikeToggleServiceTest.executor": "Run",
+ "Gradle.CommentReportServiceTest.executor": "Run",
+ "Gradle.CommentReportServiceTest.reportComment.executor": "Run",
+ "Gradle.CommentServiceTest.addReply.executor": "Run",
+ "Gradle.CommentServiceTest.addReply_exception_depth.executor": "Run",
+ "Gradle.CommentServiceTest.deletePrentAndReply.executor": "Run",
+ "Gradle.CommentServiceTest.deleteReply.executor": "Run",
+ "Gradle.CommentServiceTest.deleteReply_keep_parent.executor": "Run",
+ "Gradle.CommentServiceTest.executor": "Run",
+ "Gradle.CommentServiceTest.likeComment_up.executor": "Run",
+ "Gradle.CommentServiceTest.updateComment.executor": "Run",
+ "Gradle.CommentServiceTest.updateComment_exception_noAuth.executor": "Run",
+ "Gradle.CommentUpdateServiceTest.executor": "Run",
+ "Gradle.CommentUpdateServiceTest.updateComment.executor": "Run",
+ "Gradle.CourseCreateServiceTest.executor": "Run",
+ "Gradle.CourseServiceTest.executor": "Debug",
+ "Gradle.PostApiTest.executor": "Run",
+ "Gradle.PostApiTest.findPosts.executor": "Run",
+ "Gradle.PostControllerTest.addPost.executor": "Run",
+ "Gradle.PostControllerTest.addPost_exception_noTitle.executor": "Run",
+ "Gradle.PostControllerTest.deletePost.executor": "Run",
+ "Gradle.PostControllerTest.executor": "Run",
+ "Gradle.PostControllerTest.findAllPosts.executor": "Run",
+ "Gradle.PostControllerTest.findMyPosts.executor": "Run",
+ "Gradle.PostControllerTest.findPost.executor": "Run",
+ "Gradle.PostControllerTest.findPost_exception_invalidId.executor": "Run",
+ "Gradle.PostControllerTest.findPosts.executor": "Run",
+ "Gradle.PostControllerTest.findPostsByCategory.executor": "Run",
+ "Gradle.PostControllerTest.likePost_up.executor": "Run",
+ "Gradle.PostControllerTest.updatePost.executor": "Run",
+ "Gradle.PostCreateServiceTest.executor": "Run",
+ "Gradle.PostDeleteServiceTest.deletePost_exception_noAuth.executor": "Run",
+ "Gradle.PostDeleteServiceTest.executor": "Run",
+ "Gradle.PostFindMockTest.executor": "Run",
+ "Gradle.PostFindServiceTest.executor": "Run",
+ "Gradle.PostLikeToggleServiceTest.executor": "Run",
+ "Gradle.PostReportServiceTest.executor": "Run",
+ "Gradle.PostServiceTest.addPost_exception_invalid_category.executor": "Run",
+ "Gradle.PostServiceTest.deletePost.executor": "Run",
+ "Gradle.PostServiceTest.executor": "Run",
+ "Gradle.PostServiceTest.findAllPosts_login.executor": "Run",
+ "Gradle.PostServiceTest.findMyPosts.executor": "Run",
+ "Gradle.PostServiceTest.findPosts_category_free.executor": "Run",
+ "Gradle.PostServiceTest.likePost.executor": "Run",
+ "Gradle.PostServiceTest.likePost_down.executor": "Run",
+ "Gradle.PostServiceTest.likePost_up.executor": "Debug",
+ "Gradle.PostServiceTest.updatePost.executor": "Run",
+ "Gradle.ReportApiTest.executor": "Run",
+ "Gradle.ReportControllerTest.reportComment.executor": "Run",
+ "Gradle.ReportControllerTest.reportPost (1).executor": "Run",
+ "Gradle.ReportControllerTest.reportPost.executor": "Run",
+ "Gradle.ReportServiceTest.reportComment.executor": "Run",
+ "Gradle.ReportServiceTest.reportComment_exception_duplicated.executor": "Run",
+ "Gradle.ReportServiceTest.reportPost.executor": "Run",
+ "Gradle.ReportServiceTest.reportPost_exception_duplicated.executor": "Run",
+ "Gradle.ReportServiceTest.reportPost_exception_invalidId.executor": "Run",
+ "Gradle.ReviewAccessCheckServiceTest.executor": "Run",
+ "Gradle.ReviewApiTest.addReview.executor": "Run",
+ "Gradle.ReviewApiTest.executor": "Run",
+ "Gradle.ReviewApiTest.updateReview.executor": "Run",
+ "Gradle.ReviewControllerTest.findAllReviewsByCourseId_exception_accessDenied.executor": "Run",
+ "Gradle.ReviewControllerTest.findAllReviewsByCourseId_success.executor": "Run",
+ "Gradle.ReviewCreateServiceTest.executor": "Run",
+ "Gradle.ReviewDeleteServiceTest.executor": "Run",
+ "Gradle.ReviewFindServiceTest.executor": "Run",
+ "Gradle.ReviewLikeToggleServiceTest.executor": "Run",
+ "Gradle.ReviewServiceTest.canAccessReviews_false_noReview.executor": "Run",
+ "Gradle.ReviewServiceTest.canAccessReviews_false_sixMonths.executor": "Run",
+ "Gradle.ReviewServiceTest.canAccessReviews_true.executor": "Run",
+ "Gradle.ReviewUpdateServiceTest.executor": "Run",
+ "Gradle.ReviewUpdateServiceTest.updateReview.executor": "Run",
+ "Gradle.ReviewValidateAccessServiceTest.executor": "Run",
+ "Notification.DisplayName-DoNotAsk-Lombok plugin": "Lombok integration problem",
+ "Notification.DoNotAsk-Lombok plugin": "true",
+ "RequestMappingsPanelOrder0": "0",
+ "RequestMappingsPanelOrder1": "1",
+ "RequestMappingsPanelWidth0": "75",
+ "RequestMappingsPanelWidth1": "75",
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "Shell Script.gradlew.executor": "Run",
+ "Spring Boot.HoneycoursesBackend.executor": "Run",
+ "WebServerToolWindowFactoryState": "false",
+ "com.intellij.testIntegration.createTest.CreateTestDialog.defaultLibrary": "JUnit5",
+ "com.intellij.testIntegration.createTest.CreateTestDialog.defaultLibrarySuperClass.JUnit5": "",
+ "create.test.in.the.same.root": "true",
+ "extract.method.default.visibility": "private",
+ "git-widget-placeholder": "HC-204-refactoring",
+ "ignore.virus.scanning.warn.message": "true",
+ "kotlin-language-version-configured": "true",
+ "last_opened_file_path": "/Users/pagh/Desktop/honeycourses-backend-spring/build.gradle",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "project.structure.last.edited": "Modules",
+ "project.structure.proportion": "0.15",
+ "project.structure.side.proportion": "0.2",
+ "settings.editor.selected.configurable": "reference.settingsdialog.project.gradle",
+ "vue.rearranger.settings.migration": "true"
},
- "keyToStringList": {
- "DatabaseDriversLRU": [
- "mysql"
+ "keyToStringList": {
+ "DatabaseDriversLRU": [
+ "mysql"
]
}
-}]]>
+}
@@ -229,15 +227,15 @@
+
+
-
-
-
-
+
+
@@ -250,7 +248,7 @@
-
+
@@ -261,7 +259,7 @@
true
-
+
@@ -274,7 +272,7 @@
-
+
@@ -285,7 +283,7 @@
true
-
+
@@ -298,7 +296,7 @@
-
+
@@ -309,7 +307,7 @@
true
-
+
@@ -322,7 +320,7 @@
-
+
@@ -333,7 +331,7 @@
true
-
+
@@ -346,7 +344,7 @@
-
+
@@ -365,27 +363,28 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
+
@@ -411,31 +410,16 @@
-
-
-
-
- 1701334341640
-
-
-
- 1701334341640
-
-
-
- 1701334816668
-
-
-
- 1701334816668
-
-
-
- 1701338098358
-
-
-
- 1701338098358
+
+
+
+
+
+
+
+
+
+
@@ -797,7 +781,39 @@
1711995550289
-
+
+
+ 1712045023435
+
+
+
+ 1712045023435
+
+
+
+ 1712047231893
+
+
+
+ 1712047231893
+
+
+
+ 1712069194844
+
+
+
+ 1712069194844
+
+
+
+ 1712069384199
+
+
+
+ 1712069384199
+
+
@@ -815,10 +831,6 @@
-
-
-
-
@@ -840,7 +852,11 @@
-
+
+
+
+
+
@@ -854,6 +870,7 @@
+
diff --git a/src/main/java/org/wooriverygood/api/comment/application/CommentCreateService.java b/src/main/java/org/wooriverygood/api/comment/application/CommentCreateService.java
index 5214f8e..60c338e 100644
--- a/src/main/java/org/wooriverygood/api/comment/application/CommentCreateService.java
+++ b/src/main/java/org/wooriverygood/api/comment/application/CommentCreateService.java
@@ -10,6 +10,9 @@
import org.wooriverygood.api.comment.dto.NewReplyRequest;
import org.wooriverygood.api.comment.repository.CommentRepository;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.exception.PostNotFoundException;
import org.wooriverygood.api.post.repository.PostRepository;
@@ -23,15 +26,19 @@ public class CommentCreateService {
private final CommentRepository commentRepository;
+ private final MemberRepository memberRepository;
+
public void addComment(AuthInfo authInfo, Long postId, NewCommentRequest request) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
Post post = postRepository.findById(postId)
.orElseThrow(PostNotFoundException::new);
Comment comment = Comment.builder()
.content(request.getContent())
- .author(authInfo.getUsername())
.post(post)
+ .member(member)
.build();
commentRepository.save(comment);
@@ -44,13 +51,16 @@ public void addReply(Long commentId, NewReplyRequest request, AuthInfo authInfo)
if (!parent.isParent())
throw new ReplyDepthException();
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
+
Comment child = Comment.builder()
.content(request.getContent())
- .author(authInfo.getUsername())
.post(parent.getPost())
.parent(parent)
+ .member(member)
.build();
- parent.addChildren(child);
+ parent.addReply(child);
commentRepository.save(child);
}
diff --git a/src/main/java/org/wooriverygood/api/comment/application/CommentDeleteService.java b/src/main/java/org/wooriverygood/api/comment/application/CommentDeleteService.java
index 9b8f2de..4bab334 100644
--- a/src/main/java/org/wooriverygood/api/comment/application/CommentDeleteService.java
+++ b/src/main/java/org/wooriverygood/api/comment/application/CommentDeleteService.java
@@ -8,6 +8,9 @@
import org.wooriverygood.api.comment.repository.CommentLikeRepository;
import org.wooriverygood.api.comment.repository.CommentRepository;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
@Service
@Transactional
@@ -18,12 +21,16 @@ public class CommentDeleteService {
private final CommentLikeRepository commentLikeRepository;
+ private final MemberRepository memberRepository;
+
public void deleteComment(Long commentId, AuthInfo authInfo) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
Comment comment = commentRepository.findById(commentId)
.orElseThrow(CommentNotFoundException::new);
- comment.validateAuthor(authInfo.getUsername());
+ comment.validateAuthor(member);
commentLikeRepository.deleteAllByComment(comment);
deleteCommentOrReply(comment);
@@ -34,7 +41,7 @@ private void deleteCommentOrReply(Comment comment) {
deleteParent(comment);
return;
}
- deleteChild(comment);
+ deleteReply(comment);
}
private void deleteParent(Comment parent) {
@@ -45,9 +52,9 @@ private void deleteParent(Comment parent) {
parent.willBeDeleted();
}
- private void deleteChild(Comment reply) {
+ private void deleteReply(Comment reply) {
Comment parent = reply.getParent();
- parent.deleteChild(reply);
+ parent.deleteReply(reply);
commentRepository.delete(reply);
if (parent.canDelete())
diff --git a/src/main/java/org/wooriverygood/api/comment/application/CommentFindService.java b/src/main/java/org/wooriverygood/api/comment/application/CommentFindService.java
index a9c2a51..599a19a 100644
--- a/src/main/java/org/wooriverygood/api/comment/application/CommentFindService.java
+++ b/src/main/java/org/wooriverygood/api/comment/application/CommentFindService.java
@@ -10,45 +10,52 @@
import org.wooriverygood.api.comment.repository.CommentLikeRepository;
import org.wooriverygood.api.comment.repository.CommentRepository;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import java.util.List;
import java.util.Objects;
@Service
-@Transactional(readOnly = true)
@RequiredArgsConstructor
+@Transactional(readOnly = true)
public class CommentFindService {
private final CommentRepository commentRepository;
private final CommentLikeRepository commentLikeRepository;
+ private final MemberRepository memberRepository;
+
public CommentsResponse findAllCommentsByPostId(Long postId, AuthInfo authInfo) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
List comments = commentRepository.findAllByPostId(postId);
List responses = comments.stream()
- .map(comment -> convertToCommentResponse(comment, authInfo))
+ .map(comment -> convertToCommentResponse(comment, member))
.filter(response -> !Objects.isNull(response))
.toList();
return new CommentsResponse(responses);
}
- private CommentResponse convertToCommentResponse(Comment comment, AuthInfo authInfo) {
+ private CommentResponse convertToCommentResponse(Comment comment, Member member) {
if (comment.isReply())
return null;
if (comment.isSoftRemoved())
- return CommentResponse.softRemovedOf(comment, convertToReplyResponses(comment, authInfo));
+ return CommentResponse.softRemovedOf(comment, convertToReplyResponses(comment, member), comment.sameAuthor(member));
- boolean liked = commentLikeRepository.existsByCommentAndUsername(comment, authInfo.getUsername());
- return CommentResponse.of(comment, convertToReplyResponses(comment, authInfo), liked);
+ boolean liked = commentLikeRepository.existsByCommentAndMember(comment, member);
+ return CommentResponse.of(comment, convertToReplyResponses(comment, member), liked, comment.sameAuthor(member));
}
- private List convertToReplyResponses(Comment parent, AuthInfo authInfo) {
- return parent.getChildren()
+ private List convertToReplyResponses(Comment parent, Member member) {
+ return parent.getReplies()
.stream()
.map(reply -> {
- boolean liked = commentLikeRepository.existsByCommentAndUsername(reply, authInfo.getUsername());
- return ReplyResponse.from(reply, liked);
+ boolean liked = commentLikeRepository.existsByCommentAndMember(reply, member);
+ return ReplyResponse.of(reply, liked, reply.sameAuthor(member));
})
.toList();
}
diff --git a/src/main/java/org/wooriverygood/api/comment/application/CommentLikeToggleService.java b/src/main/java/org/wooriverygood/api/comment/application/CommentLikeToggleService.java
index 9abd67d..e05aef3 100644
--- a/src/main/java/org/wooriverygood/api/comment/application/CommentLikeToggleService.java
+++ b/src/main/java/org/wooriverygood/api/comment/application/CommentLikeToggleService.java
@@ -10,6 +10,9 @@
import org.wooriverygood.api.comment.repository.CommentRepository;
import org.wooriverygood.api.comment.exception.CommentNotFoundException;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import java.util.Optional;
@@ -22,15 +25,19 @@ public class CommentLikeToggleService {
private final CommentLikeRepository commentLikeRepository;
+ private final MemberRepository memberRepository;
+
public CommentLikeResponse likeComment(Long commentId, AuthInfo authInfo) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
Comment comment = commentRepository.findById(commentId)
.orElseThrow(CommentNotFoundException::new);
- Optional commentLike = commentLikeRepository.findByCommentAndUsername(comment, authInfo.getUsername());
+ Optional commentLike = commentLikeRepository.findByCommentAndMember(comment, member);
if (commentLike.isEmpty()) {
- addCommentLike(comment, authInfo.getUsername());
+ addCommentLike(comment, member);
return createCommentLikeResponse(comment, true);
}
@@ -38,10 +45,10 @@ public CommentLikeResponse likeComment(Long commentId, AuthInfo authInfo) {
return createCommentLikeResponse(comment, false);
}
- private void addCommentLike(Comment comment, String username) {
+ private void addCommentLike(Comment comment, Member member) {
CommentLike commentLike = CommentLike.builder()
.comment(comment)
- .username(username)
+ .member(member)
.build();
comment.addCommentLike(commentLike);
diff --git a/src/main/java/org/wooriverygood/api/comment/application/CommentUpdateService.java b/src/main/java/org/wooriverygood/api/comment/application/CommentUpdateService.java
index 6ddca9e..20e8e4a 100644
--- a/src/main/java/org/wooriverygood/api/comment/application/CommentUpdateService.java
+++ b/src/main/java/org/wooriverygood/api/comment/application/CommentUpdateService.java
@@ -8,6 +8,9 @@
import org.wooriverygood.api.comment.dto.CommentUpdateRequest;
import org.wooriverygood.api.comment.repository.CommentRepository;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
@Service
@Transactional
@@ -16,12 +19,16 @@ public class CommentUpdateService {
private final CommentRepository commentRepository;
+ private final MemberRepository memberRepository;
+
public void updateComment(Long commentId, CommentUpdateRequest request, AuthInfo authInfo) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
Comment comment = commentRepository.findById(commentId)
.orElseThrow(CommentNotFoundException::new);
- comment.validateAuthor(authInfo.getUsername());
+ comment.validateAuthor(member);
comment.updateContent(request.getContent());
}
diff --git a/src/main/java/org/wooriverygood/api/comment/domain/Comment.java b/src/main/java/org/wooriverygood/api/comment/domain/Comment.java
index 6c9d0c2..d5a4b0f 100644
--- a/src/main/java/org/wooriverygood/api/comment/domain/Comment.java
+++ b/src/main/java/org/wooriverygood/api/comment/domain/Comment.java
@@ -6,6 +6,7 @@
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.wooriverygood.api.global.error.exception.AuthorizationException;
+import org.wooriverygood.api.member.domain.Member;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.report.domain.CommentReport;
@@ -15,8 +16,8 @@
import java.util.Objects;
@Entity
-@Table(name = "comments")
@Getter
+@Table(name = "comments")
@EntityListeners(AuditingEntityListener.class)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Comment {
@@ -31,13 +32,13 @@ public class Comment {
private Comment parent;
@OneToMany(mappedBy = "parent")
- private List children = new ArrayList<>();
+ private List replies = new ArrayList<>();
@Column(name = "comment_content", length = 200, nullable = false)
private String content;
- @Column(name = "comment_author", length = 1000)
- private String author;
+ @ManyToOne(fetch = FetchType.LAZY)
+ private Member member;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_id", referencedColumnName = "post_id")
@@ -69,16 +70,18 @@ public class Comment {
private boolean updated;
@Builder
- public Comment(Long id, String content, String author, Post post, Comment parent, List commentLikes, List reports, boolean softRemoved, boolean updated) {
+ public Comment(Long id, String content, Post post, Member member,
+ Comment parent, List commentLikes,
+ List reports, boolean softRemoved, boolean updated) {
this.id = id;
this.content = content;
- this.author = author;
this.post = post;
this.parent = parent;
this.commentLikes = commentLikes;
this.reports = reports;
this.softRemoved = softRemoved;
this.updated = updated;
+ this.member = member;
}
public void addCommentLike(CommentLike commentLike) {
@@ -94,15 +97,19 @@ public void addReport(CommentReport report) {
reports.add(report);
}
- public boolean hasReportByUser(String username) {
+ public boolean hasReportByMember(Member member) {
for (CommentReport report: reports)
- if (report.isOwner(username))
+ if (report.isOwner(member))
return true;
return false;
}
- public void validateAuthor(String author) {
- if (!this.author.equals(author)) throw new AuthorizationException();
+ public boolean sameAuthor(Member member) {
+ return this.member.equals(member);
+ }
+
+ public void validateAuthor(Member member) {
+ if (!sameAuthor(member)) throw new AuthorizationException();
}
public void updateContent(String content) {
@@ -110,12 +117,12 @@ public void updateContent(String content) {
updated = true;
}
- public void addChildren(Comment reply) {
- children.add(reply);
+ public void addReply(Comment reply) {
+ replies.add(reply);
}
- public void deleteChild(Comment reply) {
- children.remove(reply);
+ public void deleteReply(Comment reply) {
+ replies.remove(reply);
reply.delete();
}
@@ -132,7 +139,7 @@ public boolean isReply() {
}
public boolean hasNoReply() {
- return children.isEmpty();
+ return replies.isEmpty();
}
public void willBeDeleted() {
diff --git a/src/main/java/org/wooriverygood/api/comment/domain/CommentLike.java b/src/main/java/org/wooriverygood/api/comment/domain/CommentLike.java
index 320e161..5b9a741 100644
--- a/src/main/java/org/wooriverygood/api/comment/domain/CommentLike.java
+++ b/src/main/java/org/wooriverygood/api/comment/domain/CommentLike.java
@@ -4,6 +4,7 @@
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
+import org.wooriverygood.api.member.domain.Member;
@Entity
@Table(name = "commentLikes")
@@ -19,15 +20,15 @@ public class CommentLike {
@JoinColumn(name = "comment_id", referencedColumnName = "comment_id")
private Comment comment;
- @Column
- private String username;
+ @ManyToOne(fetch = FetchType.LAZY)
+ private Member member;
@Builder
- public CommentLike(Long id, Comment comment, String username) {
+ public CommentLike(Long id, Comment comment, Member member) {
this.id = id;
this.comment = comment;
- this.username = username;
+ this.member = member;
}
public void delete() {
diff --git a/src/main/java/org/wooriverygood/api/comment/dto/CommentResponse.java b/src/main/java/org/wooriverygood/api/comment/dto/CommentResponse.java
index 91b790b..d610aa6 100644
--- a/src/main/java/org/wooriverygood/api/comment/dto/CommentResponse.java
+++ b/src/main/java/org/wooriverygood/api/comment/dto/CommentResponse.java
@@ -17,8 +17,6 @@ public class CommentResponse {
private final String commentContent;
- private final String commentAuthor;
-
private final Long postId;
private final int commentLikeCount;
@@ -33,12 +31,20 @@ public class CommentResponse {
private final boolean reported;
+ private final boolean isMine;
+
+ private final long memberId;
+
@Builder
- public CommentResponse(Long commentId, String commentContent, String commentAuthor, Long postId, int commentLikeCount, LocalDateTime commentTime, boolean liked, List replies, boolean updated, boolean reported) {
+ public CommentResponse(
+ Long commentId, String commentContent, Long postId,
+ int commentLikeCount, LocalDateTime commentTime, boolean liked,
+ List replies, boolean updated, boolean reported,
+ boolean isMine, long memberId
+ ) {
this.commentId = commentId;
this.commentContent = commentContent;
- this.commentAuthor = commentAuthor;
this.postId = postId;
this.commentLikeCount = commentLikeCount;
this.commentTime = commentTime;
@@ -46,14 +52,16 @@ public CommentResponse(Long commentId, String commentContent, String commentAuth
this.replies = replies;
this.updated = updated;
this.reported = reported;
+ this.isMine = isMine;
+ this.memberId = memberId;
}
- public static CommentResponse of(Comment comment, List replies, boolean liked) {
+ public static CommentResponse of(Comment comment, List replies, boolean liked, boolean isMine) {
return CommentResponse.builder()
.commentId(comment.getId())
.commentContent(comment.getContent())
- .commentAuthor(comment.getAuthor())
+ .memberId(comment.getMember().getId())
.postId(comment.getPost().getId())
.commentLikeCount(comment.getLikeCount())
.commentTime(comment.getCreatedAt())
@@ -61,20 +69,22 @@ public static CommentResponse of(Comment comment, List replies, b
.replies(replies)
.updated(comment.isUpdated())
.reported(comment.isReportedTooMuch())
+ .isMine(isMine)
.build();
}
- public static CommentResponse softRemovedOf(Comment comment, List replies) {
+ public static CommentResponse softRemovedOf(Comment comment, List replies, boolean isMine) {
return CommentResponse.builder()
.commentId(comment.getId())
.commentContent(null)
- .commentAuthor(comment.getAuthor())
+ .memberId(comment.getMember().getId())
.postId(comment.getPost().getId())
.commentLikeCount(comment.getLikeCount())
.commentTime(comment.getCreatedAt())
.replies(replies)
.updated(comment.isUpdated())
.reported(comment.isReportedTooMuch())
+ .isMine(isMine)
.build();
}
diff --git a/src/main/java/org/wooriverygood/api/comment/dto/ReplyResponse.java b/src/main/java/org/wooriverygood/api/comment/dto/ReplyResponse.java
index c9a5566..7556f1a 100644
--- a/src/main/java/org/wooriverygood/api/comment/dto/ReplyResponse.java
+++ b/src/main/java/org/wooriverygood/api/comment/dto/ReplyResponse.java
@@ -16,8 +16,6 @@ public class ReplyResponse {
private final String replyContent;
- private final String replyAuthor;
-
private final int replyLikeCount;
private final LocalDateTime replyTime;
@@ -28,13 +26,21 @@ public class ReplyResponse {
private final boolean reported;
+ private final boolean isMine;
- @Builder
+ private final long memberId;
- public ReplyResponse(Long replyId, String replyContent, String replyAuthor, int replyLikeCount, LocalDateTime replyTime, boolean liked, boolean updated, boolean reported) {
+
+ @Builder
+ public ReplyResponse(
+ Long replyId, String replyContent, int replyLikeCount,
+ LocalDateTime replyTime, boolean liked, boolean updated,
+ boolean reported, boolean isMine, long memberId
+ ) {
this.replyId = replyId;
this.replyContent = replyContent;
- this.replyAuthor = replyAuthor;
+ this.isMine = isMine;
+ this.memberId = memberId;
this.replyLikeCount = replyLikeCount;
this.replyTime = replyTime;
this.liked = liked;
@@ -42,16 +48,17 @@ public ReplyResponse(Long replyId, String replyContent, String replyAuthor, int
this.reported = reported;
}
- public static ReplyResponse from(Comment reply, boolean liked) {
+ public static ReplyResponse of(Comment reply, boolean liked, boolean isMine) {
return ReplyResponse.builder()
.replyId(reply.getId())
.replyContent(reply.getContent())
- .replyAuthor(reply.getAuthor())
+ .memberId(reply.getMember().getId())
.replyLikeCount(reply.getLikeCount())
.replyTime(reply.getCreatedAt())
.liked(liked)
.updated(reply.isUpdated())
.reported(reply.isReportedTooMuch())
+ .isMine(isMine)
.build();
}
diff --git a/src/main/java/org/wooriverygood/api/comment/repository/CommentLikeRepository.java b/src/main/java/org/wooriverygood/api/comment/repository/CommentLikeRepository.java
index 28c33f5..00e475d 100644
--- a/src/main/java/org/wooriverygood/api/comment/repository/CommentLikeRepository.java
+++ b/src/main/java/org/wooriverygood/api/comment/repository/CommentLikeRepository.java
@@ -3,14 +3,15 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.wooriverygood.api.comment.domain.Comment;
import org.wooriverygood.api.comment.domain.CommentLike;
+import org.wooriverygood.api.member.domain.Member;
import java.util.Optional;
public interface CommentLikeRepository extends JpaRepository {
- Optional findByCommentAndUsername(Comment comment, String username);
+ Optional findByCommentAndMember(Comment comment, Member member);
- boolean existsByCommentAndUsername(Comment comment, String username);
+ boolean existsByCommentAndMember(Comment comment, Member member);
void deleteAllByComment(Comment comment);
}
diff --git a/src/main/java/org/wooriverygood/api/course/domain/Course.java b/src/main/java/org/wooriverygood/api/course/domain/Course.java
index efab51b..bda5b32 100644
--- a/src/main/java/org/wooriverygood/api/course/domain/Course.java
+++ b/src/main/java/org/wooriverygood/api/course/domain/Course.java
@@ -1,6 +1,7 @@
package org.wooriverygood.api.course.domain;
import jakarta.persistence.*;
+import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -8,8 +9,8 @@
@Entity
@Getter
-@NoArgsConstructor
@Table(name = "courses")
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Course {
@Id
@@ -36,6 +37,7 @@ public class Course {
@ColumnDefault("0")
private int reviewCount;
+
@Builder
public Course(Long id, String name, String category, double credit, int isYouguan, String kaikeYuanxi, int reviewCount) {
this.id = id;
diff --git a/src/main/java/org/wooriverygood/api/global/auth/AuthInfo.java b/src/main/java/org/wooriverygood/api/global/auth/AuthInfo.java
index 8c56647..4aa4f01 100644
--- a/src/main/java/org/wooriverygood/api/global/auth/AuthInfo.java
+++ b/src/main/java/org/wooriverygood/api/global/auth/AuthInfo.java
@@ -6,11 +6,15 @@
@Getter
public class AuthInfo {
+ private Long memberId;
+
private final String sub;
+
private final String username;
@Builder
- public AuthInfo(String sub, String username) {
+ public AuthInfo(Long memberId, String sub, String username) {
+ this.memberId = memberId;
this.sub = sub;
this.username = username;
}
diff --git a/src/main/java/org/wooriverygood/api/global/auth/AuthenticationPrincipalArgumentResolver.java b/src/main/java/org/wooriverygood/api/global/auth/AuthenticationPrincipalArgumentResolver.java
index a3a1e77..c0d17da 100644
--- a/src/main/java/org/wooriverygood/api/global/auth/AuthenticationPrincipalArgumentResolver.java
+++ b/src/main/java/org/wooriverygood/api/global/auth/AuthenticationPrincipalArgumentResolver.java
@@ -1,5 +1,6 @@
package org.wooriverygood.api.global.auth;
+import lombok.RequiredArgsConstructor;
import org.springframework.core.MethodParameter;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -8,9 +9,15 @@
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
+@RequiredArgsConstructor
public class AuthenticationPrincipalArgumentResolver implements HandlerMethodArgumentResolver {
+ private final MemberRepository memberRepository;
+
+
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(Login.class);
@@ -23,8 +30,9 @@ public Object resolveArgument(MethodParameter parameter,
WebDataBinderFactory binderFactory) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
- if (authentication != null && authentication.getPrincipal() instanceof Jwt jwt)
+ if (authentication != null && authentication.getPrincipal() instanceof Jwt jwt) {
return createAuthInfo(jwt);
+ }
return AuthInfo.builder().build();
}
@@ -33,7 +41,14 @@ private AuthInfo createAuthInfo(Jwt jwt) {
String sub = jwt.getClaim("sub");
String username = jwt.getClaim("username");
+ Member member = memberRepository.findByUsername(username)
+ .orElseGet(() -> {
+ Member newMember = Member.builder().username(username).build();
+ return memberRepository.save(newMember);
+ });
+
return AuthInfo.builder()
+ .memberId(member.getId())
.sub(sub)
.username(username)
.build();
diff --git a/src/main/java/org/wooriverygood/api/global/config/WebConfig.java b/src/main/java/org/wooriverygood/api/global/config/WebConfig.java
index 40ddcb3..9278e3c 100644
--- a/src/main/java/org/wooriverygood/api/global/config/WebConfig.java
+++ b/src/main/java/org/wooriverygood/api/global/config/WebConfig.java
@@ -1,20 +1,25 @@
package org.wooriverygood.api.global.config;
+import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.wooriverygood.api.global.auth.AuthenticationPrincipalArgumentResolver;
+import org.wooriverygood.api.member.repository.MemberRepository;
import java.util.List;
@Configuration
+@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
+ private final MemberRepository memberRepository;
+
@Bean
public AuthenticationPrincipalArgumentResolver authenticationPrincipalArgumentResolver() {
- return new AuthenticationPrincipalArgumentResolver();
+ return new AuthenticationPrincipalArgumentResolver(memberRepository);
}
@Override
diff --git a/src/main/java/org/wooriverygood/api/member/domain/Member.java b/src/main/java/org/wooriverygood/api/member/domain/Member.java
new file mode 100644
index 0000000..6dbee95
--- /dev/null
+++ b/src/main/java/org/wooriverygood/api/member/domain/Member.java
@@ -0,0 +1,56 @@
+package org.wooriverygood.api.member.domain;
+
+import jakarta.persistence.*;
+import lombok.AccessLevel;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import org.wooriverygood.api.global.error.exception.AuthorizationException;
+import org.wooriverygood.api.review.domain.Review;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Entity
+@Getter
+@Table(name = "members")
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+public class Member {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ private String username;
+
+ @Column(name = "old_username")
+ private String oldUsername;
+
+ private String email;
+
+ @OneToMany(mappedBy = "member")
+ private List reviews = new ArrayList<>();
+
+
+ @Builder
+ public Member(Long id, String username) {
+ this.id = id;
+ this.username = username;
+ }
+
+ public boolean isSame(Member member) {
+ return Objects.equals(this.id, member.getId());
+ }
+
+ public void verify(Member member) {
+ if (!isSame(member)) {
+ throw new AuthorizationException();
+ }
+ }
+
+ public void addReview(Review review) {
+ reviews.add(review);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/wooriverygood/api/member/exception/MemberNotFoundException.java b/src/main/java/org/wooriverygood/api/member/exception/MemberNotFoundException.java
new file mode 100644
index 0000000..7581fc4
--- /dev/null
+++ b/src/main/java/org/wooriverygood/api/member/exception/MemberNotFoundException.java
@@ -0,0 +1,12 @@
+package org.wooriverygood.api.member.exception;
+
+import org.wooriverygood.api.global.error.exception.NotFoundException;
+
+public class MemberNotFoundException extends NotFoundException {
+ private static final String MESSAGE = "유저 정보를 찾을 수 없습니다.";
+
+
+ public MemberNotFoundException() {
+ super(MESSAGE);
+ }
+}
diff --git a/src/main/java/org/wooriverygood/api/member/repository/MemberRepository.java b/src/main/java/org/wooriverygood/api/member/repository/MemberRepository.java
new file mode 100644
index 0000000..d10e1df
--- /dev/null
+++ b/src/main/java/org/wooriverygood/api/member/repository/MemberRepository.java
@@ -0,0 +1,12 @@
+package org.wooriverygood.api.member.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.wooriverygood.api.member.domain.Member;
+
+import java.util.Optional;
+
+public interface MemberRepository extends JpaRepository {
+
+ Optional findByUsername(String username);
+
+}
diff --git a/src/main/java/org/wooriverygood/api/post/application/PostCreateService.java b/src/main/java/org/wooriverygood/api/post/application/PostCreateService.java
index 50dfeff..403b65a 100644
--- a/src/main/java/org/wooriverygood/api/post/application/PostCreateService.java
+++ b/src/main/java/org/wooriverygood/api/post/application/PostCreateService.java
@@ -3,6 +3,9 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.domain.PostCategory;
import org.wooriverygood.api.post.dto.NewPostRequest;
@@ -10,24 +13,28 @@
import org.wooriverygood.api.global.auth.AuthInfo;
@Service
+@Transactional
@RequiredArgsConstructor
public class PostCreateService {
private final PostRepository postRepository;
- @Transactional
+ private final MemberRepository memberRepository;
+
public void addPost(AuthInfo authInfo, NewPostRequest newPostRequest) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
PostCategory.parse(newPostRequest.getPostCategory());
- Post post = createPost(authInfo, newPostRequest);
+ Post post = createPost(member, newPostRequest);
postRepository.save(post);
}
- private Post createPost(AuthInfo authInfo, NewPostRequest newPostRequest) {
+ private Post createPost(Member member, NewPostRequest newPostRequest) {
return Post.builder()
.title(newPostRequest.getPostTitle())
.content(newPostRequest.getPostContent())
.category(PostCategory.parse(newPostRequest.getPostCategory()))
- .author(authInfo.getUsername())
+ .member(member)
.build();
}
diff --git a/src/main/java/org/wooriverygood/api/post/application/PostDeleteService.java b/src/main/java/org/wooriverygood/api/post/application/PostDeleteService.java
index aec5f1c..feeed2c 100644
--- a/src/main/java/org/wooriverygood/api/post/application/PostDeleteService.java
+++ b/src/main/java/org/wooriverygood/api/post/application/PostDeleteService.java
@@ -4,6 +4,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.wooriverygood.api.comment.repository.CommentRepository;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.exception.PostNotFoundException;
import org.wooriverygood.api.post.repository.PostLikeRepository;
@@ -11,6 +14,7 @@
import org.wooriverygood.api.global.auth.AuthInfo;
@Service
+@Transactional
@RequiredArgsConstructor
public class PostDeleteService {
@@ -20,12 +24,15 @@ public class PostDeleteService {
private final PostLikeRepository postLikeRepository;
+ private final MemberRepository memberRepository;
+
- @Transactional
public void deletePost(AuthInfo authInfo, long postId) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
Post post = postRepository.findById(postId)
.orElseThrow(PostNotFoundException::new);
- post.validateAuthor(authInfo.getUsername());
+ post.validateAuthor(member);
deleteCommentAndPostLike(post);
postRepository.delete(post);
diff --git a/src/main/java/org/wooriverygood/api/post/application/PostFindService.java b/src/main/java/org/wooriverygood/api/post/application/PostFindService.java
index b60439a..76e5d92 100644
--- a/src/main/java/org/wooriverygood/api/post/application/PostFindService.java
+++ b/src/main/java/org/wooriverygood/api/post/application/PostFindService.java
@@ -5,6 +5,9 @@
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.domain.PostCategory;
import org.wooriverygood.api.post.dto.PostDetailResponse;
@@ -18,18 +21,22 @@
import java.util.List;
@Service
-@Transactional(readOnly = true)
@RequiredArgsConstructor
+@Transactional(readOnly = true)
public class PostFindService {
private final PostRepository postRepository;
private final PostLikeRepository postLikeRepository;
+ private final MemberRepository memberRepository;
+
public PostsResponse findPosts(AuthInfo authInfo, Pageable pageable, String postCategory) {
Page page = findPostsPage(pageable, postCategory);
- return convertToPostsResponse(authInfo, page);
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
+ return convertToPostsResponse(member, page);
}
private Page findPostsPage(Pageable pageable, String postCategory) {
@@ -43,21 +50,26 @@ private Page findPostsPage(Pageable pageable, String postCategory) {
public PostDetailResponse findPostById(long postId, AuthInfo authInfo) {
Post post = postRepository.findById(postId)
.orElseThrow(PostNotFoundException::new);
- boolean liked = postLikeRepository.existsByPostAndUsername(post, authInfo.getUsername());
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
+ boolean liked = postLikeRepository.existsByPostAndMember(post, member);
+ boolean isMine = post.getMember().equals(member);
postRepository.increaseViewCount(postId);
- return PostDetailResponse.of(post, liked);
+ return PostDetailResponse.of(post, member.getId(), liked, isMine);
}
public PostsResponse findMyPosts(AuthInfo authInfo, Pageable pageable) {
- Page page = postRepository.findByAuthorOrderByIdDesc(authInfo.getUsername(), pageable);
- return convertToPostsResponse(authInfo, page);
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
+ Page page = postRepository.findByMemberOrderByIdDesc(member, pageable);
+ return convertToPostsResponse(member, page);
}
- private PostsResponse convertToPostsResponse(AuthInfo authInfo, Page page) {
+ private PostsResponse convertToPostsResponse(Member member, Page page) {
List posts = page.getContent().stream()
.map(post -> {
- boolean liked = postLikeRepository.existsByPostAndUsername(post, authInfo.getUsername());
- return PostResponse.of(post, liked);
+ boolean liked = postLikeRepository.existsByPostAndMember(post, member);
+ return PostResponse.of(post, liked, post.getMember().equals(member));
})
.toList();
diff --git a/src/main/java/org/wooriverygood/api/post/application/PostLikeToggleService.java b/src/main/java/org/wooriverygood/api/post/application/PostLikeToggleService.java
index e1536a0..29508ce 100644
--- a/src/main/java/org/wooriverygood/api/post/application/PostLikeToggleService.java
+++ b/src/main/java/org/wooriverygood/api/post/application/PostLikeToggleService.java
@@ -3,6 +3,9 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.domain.PostLike;
import org.wooriverygood.api.post.dto.PostLikeResponse;
@@ -22,15 +25,19 @@ public class PostLikeToggleService {
private final PostLikeRepository postLikeRepository;
+ private final MemberRepository memberRepository;
+
public PostLikeResponse togglePostLike(long postId, AuthInfo authInfo) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
Post post = postRepository.findById(postId)
.orElseThrow(PostNotFoundException::new);
- Optional postLike = postLikeRepository.findByPostAndUsername(post, authInfo.getUsername());
+ Optional postLike = postLikeRepository.findByPostAndMember(post, member);
if (postLike.isEmpty()) {
- addPostLike(post, authInfo.getUsername());
+ addPostLike(post, member);
return createPostLikeResponse(post, true);
}
@@ -38,10 +45,10 @@ public PostLikeResponse togglePostLike(long postId, AuthInfo authInfo) {
return createPostLikeResponse(post, false);
}
- private void addPostLike(Post post, String username) {
+ private void addPostLike(Post post, Member member) {
PostLike newPostLike = PostLike.builder()
.post(post)
- .username(username)
+ .member(member)
.build();
post.addPostLike(newPostLike);
diff --git a/src/main/java/org/wooriverygood/api/post/application/PostUpdateService.java b/src/main/java/org/wooriverygood/api/post/application/PostUpdateService.java
index a2b8b17..0978f36 100644
--- a/src/main/java/org/wooriverygood/api/post/application/PostUpdateService.java
+++ b/src/main/java/org/wooriverygood/api/post/application/PostUpdateService.java
@@ -3,6 +3,9 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.dto.PostUpdateRequest;
import org.wooriverygood.api.post.exception.PostNotFoundException;
@@ -10,16 +13,21 @@
import org.wooriverygood.api.global.auth.AuthInfo;
@Service
+@Transactional
@RequiredArgsConstructor
public class PostUpdateService {
private final PostRepository postRepository;
- @Transactional
+ private final MemberRepository memberRepository;
+
+
public void updatePost(long postId, PostUpdateRequest postUpdateRequest, AuthInfo authInfo) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
Post post = postRepository.findById(postId)
.orElseThrow(PostNotFoundException::new);
- post.validateAuthor(authInfo.getUsername());
+ post.validateAuthor(member);
post.updateTitle(postUpdateRequest.getPostTitle());
post.updateContent(postUpdateRequest.getPostContent());
diff --git a/src/main/java/org/wooriverygood/api/post/domain/Post.java b/src/main/java/org/wooriverygood/api/post/domain/Post.java
index e9a4f06..ae1b951 100644
--- a/src/main/java/org/wooriverygood/api/post/domain/Post.java
+++ b/src/main/java/org/wooriverygood/api/post/domain/Post.java
@@ -7,6 +7,7 @@
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.wooriverygood.api.global.error.exception.AuthorizationException;
import org.wooriverygood.api.comment.domain.Comment;
+import org.wooriverygood.api.member.domain.Member;
import org.wooriverygood.api.report.domain.PostReport;
import java.time.LocalDateTime;
@@ -14,8 +15,8 @@
import java.util.List;
@Entity
-@Table(name = "posts")
@Getter
+@Table(name = "posts")
@EntityListeners(AuditingEntityListener.class)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Post {
@@ -35,8 +36,8 @@ public class Post {
@Embedded
private Content content;
- @Column(name = "post_author", length = 1000)
- private String author;
+ @ManyToOne(fetch = FetchType.LAZY)
+ private Member member;
@OneToMany(mappedBy = "post", fetch = FetchType.EAGER)
private List comments = new ArrayList<>();
@@ -68,20 +69,22 @@ public class Post {
@Builder
- public Post(Long id, PostCategory category, String title, String content, String author, List comments, List postLikes, List reports, boolean updated) {
+ public Post(Long id, PostCategory category, String title, String content,
+ Member member, List comments, List postLikes,
+ List reports, boolean updated) {
this.id = id;
this.category = category;
this.title = new Title(title);
this.content = new Content(content);
- this.author = author;
+ this.member = member;
this.comments = comments;
this.postLikes = postLikes;
this.reports = reports;
this.updated = updated;
}
- public void validateAuthor(String author) {
- if (!this.author.equals(author)) throw new AuthorizationException();
+ public void validateAuthor(Member member) {
+ this.member.verify(member);
}
public void addPostLike(PostLike postLike) {
@@ -113,9 +116,9 @@ public int getCommentCount() {
return comments.size();
}
- public boolean hasReportByUser(String username) {
+ public boolean hasReportByMember(Member member) {
for (PostReport report: reports)
- if (report.isOwner(username))
+ if (report.isOwner(member))
return true;
return false;
}
diff --git a/src/main/java/org/wooriverygood/api/post/domain/PostLike.java b/src/main/java/org/wooriverygood/api/post/domain/PostLike.java
index d1c9131..fd74461 100644
--- a/src/main/java/org/wooriverygood/api/post/domain/PostLike.java
+++ b/src/main/java/org/wooriverygood/api/post/domain/PostLike.java
@@ -2,10 +2,11 @@
import jakarta.persistence.*;
import lombok.*;
+import org.wooriverygood.api.member.domain.Member;
@Entity
-@Table(name = "postLikes")
@Getter
+@Table(name = "post_likes")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class PostLike {
@@ -17,15 +18,15 @@ public class PostLike {
@JoinColumn(name = "post_id", referencedColumnName = "post_id")
private Post post;
- @Column
- private String username;
+ @ManyToOne(fetch = FetchType.LAZY)
+ private Member member;
@Builder
- public PostLike(Long id, Post post, String username) {
+ public PostLike(Long id, Post post, Member member) {
this.id = id;
this.post = post;
- this.username = username;
+ this.member = member;
}
public void delete() {
diff --git a/src/main/java/org/wooriverygood/api/post/dto/PostDetailResponse.java b/src/main/java/org/wooriverygood/api/post/dto/PostDetailResponse.java
index 0f28679..d6c4af1 100644
--- a/src/main/java/org/wooriverygood/api/post/dto/PostDetailResponse.java
+++ b/src/main/java/org/wooriverygood/api/post/dto/PostDetailResponse.java
@@ -20,7 +20,9 @@ public class PostDetailResponse {
private final String postCategory;
- private final String postAuthor;
+ private final long memberId;
+
+ private final boolean isMine;
private final int postComments;
@@ -38,12 +40,16 @@ public class PostDetailResponse {
@Builder
- public PostDetailResponse(Long postId, String postTitle, String postContent, String postCategory, String postAuthor, int postComments, int postLikes, LocalDateTime postTime, boolean liked, boolean updated, boolean reported, int viewCount) {
+ public PostDetailResponse(Long postId, String postTitle, String postContent,
+ String postCategory, long memberId, int postComments,
+ int postLikes, LocalDateTime postTime, boolean liked,
+ boolean isMine, boolean updated, boolean reported, int viewCount) {
this.postId = postId;
this.postTitle = postTitle;
this.postContent = postContent;
this.postCategory = postCategory;
- this.postAuthor = postAuthor;
+ this.memberId = memberId;
+ this.isMine = isMine;
this.postComments = postComments;
this.postLikes = postLikes;
this.postTime = postTime;
@@ -53,13 +59,14 @@ public PostDetailResponse(Long postId, String postTitle, String postContent, Str
this.viewCount = viewCount;
}
- public static PostDetailResponse of(Post post, boolean liked) {
+ public static PostDetailResponse of(Post post, long memberId, boolean liked, boolean isMine) {
return PostDetailResponse.builder()
.postId(post.getId())
.postTitle(post.getTitle())
.postContent(post.getContent())
.postCategory(post.getCategory().getValue())
- .postAuthor(post.getAuthor())
+ .isMine(isMine)
+ .memberId(memberId)
.postComments(post.getCommentCount())
.postLikes(post.getLikeCount())
.postTime(post.getCreatedAt())
diff --git a/src/main/java/org/wooriverygood/api/post/dto/PostResponse.java b/src/main/java/org/wooriverygood/api/post/dto/PostResponse.java
index a05a03f..7b4c21d 100644
--- a/src/main/java/org/wooriverygood/api/post/dto/PostResponse.java
+++ b/src/main/java/org/wooriverygood/api/post/dto/PostResponse.java
@@ -32,9 +32,13 @@ public class PostResponse {
private final int viewCount;
+ private final boolean isMine;
+
+ private final long memberId;
+
@Builder
- public PostResponse(Long postId, String postTitle, String postCategory, int postComments, int postLikes, LocalDateTime postTime, boolean liked, boolean updated, boolean reported, int viewCount) {
+ public PostResponse(Long postId, String postTitle, String postCategory, int postComments, int postLikes, LocalDateTime postTime, boolean liked, boolean updated, boolean reported, int viewCount, boolean isMine, long memberId) {
this.postId = postId;
this.postTitle = postTitle;
this.postCategory = postCategory;
@@ -45,9 +49,11 @@ public PostResponse(Long postId, String postTitle, String postCategory, int post
this.updated = updated;
this.reported = reported;
this.viewCount = viewCount;
+ this.isMine = isMine;
+ this.memberId = memberId;
}
- public static PostResponse of(Post post, boolean liked) {
+ public static PostResponse of(Post post, boolean liked, boolean isMine) {
return PostResponse.builder()
.postId(post.getId())
.postTitle(post.getTitle())
@@ -59,6 +65,8 @@ public static PostResponse of(Post post, boolean liked) {
.updated(post.isUpdated())
.reported(post.isReportedTooMuch())
.viewCount(post.getViewCount())
+ .memberId(post.getMember().getId())
+ .isMine(isMine)
.build();
}
diff --git a/src/main/java/org/wooriverygood/api/post/repository/PostLikeRepository.java b/src/main/java/org/wooriverygood/api/post/repository/PostLikeRepository.java
index b8f9a0a..f1ff129 100644
--- a/src/main/java/org/wooriverygood/api/post/repository/PostLikeRepository.java
+++ b/src/main/java/org/wooriverygood/api/post/repository/PostLikeRepository.java
@@ -1,6 +1,7 @@
package org.wooriverygood.api.post.repository;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.wooriverygood.api.member.domain.Member;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.domain.PostLike;
@@ -8,9 +9,9 @@
public interface PostLikeRepository extends JpaRepository {
- Optional findByPostAndUsername(Post post, String username);
+ Optional findByPostAndMember(Post post, Member member);
- boolean existsByPostAndUsername(Post post, String username);
+ boolean existsByPostAndMember(Post post, Member member);
void deleteAllByPost(Post post);
}
diff --git a/src/main/java/org/wooriverygood/api/post/repository/PostRepository.java b/src/main/java/org/wooriverygood/api/post/repository/PostRepository.java
index 9b0282d..12aa857 100644
--- a/src/main/java/org/wooriverygood/api/post/repository/PostRepository.java
+++ b/src/main/java/org/wooriverygood/api/post/repository/PostRepository.java
@@ -6,6 +6,7 @@
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
+import org.wooriverygood.api.member.domain.Member;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.domain.PostCategory;
@@ -16,7 +17,7 @@ public interface PostRepository extends JpaRepository {
Page findAllByCategoryOrderByIdDesc(PostCategory category, Pageable pageable);
- Page findByAuthorOrderByIdDesc(String author, Pageable pageable);
+ Page findByMemberOrderByIdDesc(Member member, Pageable pageable);
@Transactional
@Modifying(clearAutomatically = true)
diff --git a/src/main/java/org/wooriverygood/api/report/application/CommentReportService.java b/src/main/java/org/wooriverygood/api/report/application/CommentReportService.java
index 9b2f2bf..0984bcb 100644
--- a/src/main/java/org/wooriverygood/api/report/application/CommentReportService.java
+++ b/src/main/java/org/wooriverygood/api/report/application/CommentReportService.java
@@ -4,6 +4,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.wooriverygood.api.comment.exception.CommentNotFoundException;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.report.exception.DuplicatedCommentReportException;
import org.wooriverygood.api.comment.domain.Comment;
import org.wooriverygood.api.comment.repository.CommentRepository;
@@ -21,26 +24,30 @@ public class CommentReportService {
private final CommentReportRepository commentReportRepository;
+ private final MemberRepository memberRepository;
+
public void reportComment(Long commentId, ReportRequest request, AuthInfo authInfo) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
Comment comment = commentRepository.findById(commentId)
.orElseThrow(CommentNotFoundException::new);
CommentReport report = CommentReport.builder()
.comment(comment)
.message(request.getMessage())
- .username(authInfo.getUsername())
+ .member(member)
.build();
- checkIfAlreadyReport(comment, authInfo);
+ checkIfAlreadyReport(comment, member);
comment.addReport(report);
commentRepository.increaseReportCount(commentId);
commentReportRepository.save(report);
}
- private void checkIfAlreadyReport(Comment comment, AuthInfo authInfo) {
- if (comment.hasReportByUser(authInfo.getUsername()))
+ private void checkIfAlreadyReport(Comment comment, Member member) {
+ if (comment.hasReportByMember(member))
throw new DuplicatedCommentReportException();
}
}
diff --git a/src/main/java/org/wooriverygood/api/report/application/PostReportService.java b/src/main/java/org/wooriverygood/api/report/application/PostReportService.java
index 082672a..20d64bf 100644
--- a/src/main/java/org/wooriverygood/api/report/application/PostReportService.java
+++ b/src/main/java/org/wooriverygood/api/report/application/PostReportService.java
@@ -3,6 +3,9 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.report.exception.DuplicatedPostReportException;
import org.wooriverygood.api.global.auth.AuthInfo;
import org.wooriverygood.api.post.domain.Post;
@@ -21,26 +24,30 @@ public class PostReportService {
private final PostReportRepository postReportRepository;
+ private final MemberRepository memberRepository;
+
public void reportPost(Long postId, ReportRequest request, AuthInfo authInfo) {
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
Post post = postRepository.findById(postId)
.orElseThrow(PostNotFoundException::new);
PostReport report = PostReport.builder()
.post(post)
.message(request.getMessage())
- .username(authInfo.getUsername())
+ .member(member)
.build();
- checkIfAlreadyReport(post, authInfo);
+ checkIfAlreadyReport(post, member);
post.addReport(report);
postRepository.increaseReportCount(postId);
postReportRepository.save(report);
}
- private void checkIfAlreadyReport(Post post, AuthInfo authInfo) {
- if (post.hasReportByUser(authInfo.getUsername()))
+ private void checkIfAlreadyReport(Post post, Member member) {
+ if (post.hasReportByMember(member))
throw new DuplicatedPostReportException();
}
diff --git a/src/main/java/org/wooriverygood/api/report/domain/CommentReport.java b/src/main/java/org/wooriverygood/api/report/domain/CommentReport.java
index 336b0a6..917a59f 100644
--- a/src/main/java/org/wooriverygood/api/report/domain/CommentReport.java
+++ b/src/main/java/org/wooriverygood/api/report/domain/CommentReport.java
@@ -1,14 +1,17 @@
package org.wooriverygood.api.report.domain;
import jakarta.persistence.*;
+import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.wooriverygood.api.comment.domain.Comment;
+import org.wooriverygood.api.member.domain.Member;
@Entity
@Getter
-@NoArgsConstructor
+@Table(name = "comment_reports")
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class CommentReport {
@Id
@@ -19,21 +22,21 @@ public class CommentReport {
@JoinColumn(name = "comment_id", referencedColumnName = "comment_id")
private Comment comment;
- @Column
- private String username;
+ @ManyToOne(fetch = FetchType.LAZY)
+ private Member member;
private String message;
@Builder
- public CommentReport(Long id, Comment comment, String username, String message) {
+ public CommentReport(Long id, Comment comment, Member member, String message) {
this.id = id;
this.comment = comment;
- this.username = username;
+ this.member = member;
this.message = message;
}
- public boolean isOwner(String username) {
- return this.username.equals(username);
+ public boolean isOwner(Member member) {
+ return this.member.equals(member);
}
}
diff --git a/src/main/java/org/wooriverygood/api/report/domain/PostReport.java b/src/main/java/org/wooriverygood/api/report/domain/PostReport.java
index 352684a..e34ae25 100644
--- a/src/main/java/org/wooriverygood/api/report/domain/PostReport.java
+++ b/src/main/java/org/wooriverygood/api/report/domain/PostReport.java
@@ -5,10 +5,12 @@
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
+import org.wooriverygood.api.member.domain.Member;
import org.wooriverygood.api.post.domain.Post;
@Entity
@Getter
+@Table(name = "post_reports")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class PostReport {
@@ -20,22 +22,22 @@ public class PostReport {
@JoinColumn(name = "post_id", referencedColumnName = "post_id")
private Post post;
- @Column
- private String username;
+ @ManyToOne(fetch = FetchType.LAZY)
+ private Member member;
private String message;
@Builder
- public PostReport(Long id, Post post, String username, String message) {
+ public PostReport(Long id, Post post, Member member, String message) {
this.id = id;
this.post = post;
- this.username = username;
+ this.member = member;
this.message = message;
}
- public boolean isOwner(String username) {
- return this.username.equals(username);
+ public boolean isOwner(Member member) {
+ return this.member.equals(member);
}
}
diff --git a/src/main/java/org/wooriverygood/api/review/application/ReviewCreateService.java b/src/main/java/org/wooriverygood/api/review/application/ReviewCreateService.java
index 2804038..b059183 100644
--- a/src/main/java/org/wooriverygood/api/review/application/ReviewCreateService.java
+++ b/src/main/java/org/wooriverygood/api/review/application/ReviewCreateService.java
@@ -7,6 +7,9 @@
import org.wooriverygood.api.course.domain.Course;
import org.wooriverygood.api.course.repository.CourseRepository;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.dto.NewReviewRequest;
import org.wooriverygood.api.review.repository.ReviewRepository;
@@ -19,26 +22,31 @@ public class ReviewCreateService {
private final ReviewRepository reviewRepository;
+ private final MemberRepository memberRepository;
+
@Transactional
public void addReview(AuthInfo authInfo, Long courseId, NewReviewRequest request) {
Course course = courseRepository.findById(courseId)
.orElseThrow(CourseNotFoundException::new);
- Review review = createReview(course, authInfo, request);
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
+ Review review = createReview(course, request, member);
+ member.addReview(review);
reviewRepository.save(review);
courseRepository.increaseReviewCount(review.getCourse().getId());
}
- private Review createReview(Course course, AuthInfo authInfo, NewReviewRequest request) {
+ private Review createReview(Course course, NewReviewRequest request, Member member) {
return Review.builder()
.reviewTitle(request.getReviewTitle())
.course(course)
.instructorName(request.getInstructorName())
+ .member(member)
.takenSemyr(request.getTakenSemyr())
.reviewContent(request.getReviewContent())
.grade(request.getGrade())
- .authorEmail(authInfo.getUsername())
.build();
}
diff --git a/src/main/java/org/wooriverygood/api/review/application/ReviewDeleteService.java b/src/main/java/org/wooriverygood/api/review/application/ReviewDeleteService.java
index 19e5c19..8e1f122 100644
--- a/src/main/java/org/wooriverygood/api/review/application/ReviewDeleteService.java
+++ b/src/main/java/org/wooriverygood/api/review/application/ReviewDeleteService.java
@@ -5,6 +5,9 @@
import org.springframework.transaction.annotation.Transactional;
import org.wooriverygood.api.course.repository.CourseRepository;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.exception.ReviewNotFoundException;
import org.wooriverygood.api.review.repository.ReviewLikeRepository;
@@ -20,12 +23,16 @@ public class ReviewDeleteService {
private final ReviewLikeRepository reviewLikeRepository;
+ private final MemberRepository memberRepository;
+
@Transactional
public void deleteReview(Long reviewId, AuthInfo authInfo) {
Review review = reviewRepository.findById(reviewId)
.orElseThrow(ReviewNotFoundException::new);
- review.validateAuthor(authInfo.getUsername());
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
+ review.validateAuthor(member);
reviewLikeRepository.deleteAllByReview(review);
reviewRepository.delete(review);
diff --git a/src/main/java/org/wooriverygood/api/review/application/ReviewFindService.java b/src/main/java/org/wooriverygood/api/review/application/ReviewFindService.java
index d6cd6cb..3e51951 100644
--- a/src/main/java/org/wooriverygood/api/review/application/ReviewFindService.java
+++ b/src/main/java/org/wooriverygood/api/review/application/ReviewFindService.java
@@ -4,6 +4,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.dto.ReviewResponse;
import org.wooriverygood.api.review.dto.ReviewsResponse;
@@ -13,33 +16,39 @@
import java.util.List;
@Service
-@Transactional(readOnly = true)
@RequiredArgsConstructor
+@Transactional(readOnly = true)
public class ReviewFindService {
private final ReviewRepository reviewRepository;
private final ReviewLikeRepository reviewLikeRepository;
+ private final MemberRepository memberRepository;
+
public ReviewsResponse findAllReviewsByCourseId(Long courseId, AuthInfo authInfo) {
List reviews = reviewRepository.findAllByCourseId(courseId);
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
return new ReviewsResponse(reviews.stream()
.map(review -> {
- boolean liked = reviewLikeRepository.existsByReviewAndUsername(review, authInfo.getUsername());
+ boolean liked = reviewLikeRepository.existsByReviewAndMember(review, member);
return ReviewResponse.of(review,
- review.isSameAuthor(authInfo.getUsername()),
+ review.isSameAuthor(member),
liked);
})
.toList());
}
public ReviewsResponse findMyReviews(AuthInfo authInfo) {
- List reviews= reviewRepository.findByAuthorEmail(authInfo.getUsername());
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
+ List reviews= member.getReviews();
return new ReviewsResponse(reviews.stream()
.map(review -> {
- boolean liked = reviewLikeRepository.existsByReviewAndUsername(review, authInfo.getUsername());
+ boolean liked = reviewLikeRepository.existsByReviewAndMember(review, member);
return ReviewResponse.of(review, true, liked);
})
.toList());
diff --git a/src/main/java/org/wooriverygood/api/review/application/ReviewLikeToggleService.java b/src/main/java/org/wooriverygood/api/review/application/ReviewLikeToggleService.java
index 9128231..44925c0 100644
--- a/src/main/java/org/wooriverygood/api/review/application/ReviewLikeToggleService.java
+++ b/src/main/java/org/wooriverygood/api/review/application/ReviewLikeToggleService.java
@@ -3,6 +3,9 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.exception.ReviewNotFoundException;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.domain.ReviewLike;
@@ -22,15 +25,19 @@ public class ReviewLikeToggleService {
private final ReviewLikeRepository reviewLikeRepository;
+ private final MemberRepository memberRepository;
+
public ReviewLikeResponse toggleReviewLike(Long reviewId, AuthInfo authInfo) {
Review review = reviewRepository.findById(reviewId)
.orElseThrow(ReviewNotFoundException::new);
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
- Optional reviewLike = reviewLikeRepository.findByReviewAndUsername(review, authInfo.getUsername());
+ Optional reviewLike = reviewLikeRepository.findByReviewAndMember(review, member);
if (reviewLike.isEmpty()) {
- addReviewLike(review, authInfo.getUsername());
+ addReviewLike(review, member);
return createReviewLikeResponse(review, true);
}
@@ -39,10 +46,10 @@ public ReviewLikeResponse toggleReviewLike(Long reviewId, AuthInfo authInfo) {
}
- private void addReviewLike(Review review, String username) {
+ private void addReviewLike(Review review, Member member) {
ReviewLike reviewLike = ReviewLike.builder()
.review(review)
- .username(username)
+ .member(member)
.build();
review.addReviewLike(reviewLike);
diff --git a/src/main/java/org/wooriverygood/api/review/application/ReviewUpdateService.java b/src/main/java/org/wooriverygood/api/review/application/ReviewUpdateService.java
index 2234fc9..d838810 100644
--- a/src/main/java/org/wooriverygood/api/review/application/ReviewUpdateService.java
+++ b/src/main/java/org/wooriverygood/api/review/application/ReviewUpdateService.java
@@ -4,6 +4,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.dto.ReviewUpdateRequest;
import org.wooriverygood.api.review.exception.ReviewNotFoundException;
@@ -15,19 +18,22 @@ public class ReviewUpdateService {
private final ReviewRepository reviewRepository;
+ private final MemberRepository memberRepository;
+
@Transactional
public void updateReview(Long reviewId, ReviewUpdateRequest request, AuthInfo authInfo) {
Review review = reviewRepository.findById(reviewId)
.orElseThrow(ReviewNotFoundException::new);
- review.validateAuthor(authInfo.getUsername());
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
+ review.validateAuthor(member);
review.updateTitle(request.getReviewTitle());
review.updateInstructorName(request.getInstructorName());
review.updateTakenSemyr(request.getTakenSemyr());
review.updateContent(request.getReviewContent());
review.updateGrade(request.getGrade());
- review.updateAuthor(authInfo.getUsername());
}
}
diff --git a/src/main/java/org/wooriverygood/api/review/application/ReviewValidateAccessService.java b/src/main/java/org/wooriverygood/api/review/application/ReviewValidateAccessService.java
index d6b2002..625f790 100644
--- a/src/main/java/org/wooriverygood/api/review/application/ReviewValidateAccessService.java
+++ b/src/main/java/org/wooriverygood/api/review/application/ReviewValidateAccessService.java
@@ -3,6 +3,9 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.exception.MemberNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.exception.ReviewAccessDeniedException;
import org.wooriverygood.api.global.auth.AuthInfo;
import org.wooriverygood.api.review.domain.Review;
@@ -18,8 +21,13 @@ public class ReviewValidateAccessService {
private final ReviewRepository reviewRepository;
+ private final MemberRepository memberRepository;
+
+
public void validateReviewAccess(AuthInfo authInfo) {
- Review review = reviewRepository.findTopByAuthorEmailOrderByCreatedAtDesc(authInfo.getUsername())
+ Member member = memberRepository.findById(authInfo.getMemberId())
+ .orElseThrow(MemberNotFoundException::new);
+ Review review = reviewRepository.findTopByMemberOrderByCreatedAtDesc(member)
.orElseThrow(ReviewAccessDeniedException::new);
LocalDateTime now = LocalDateTime.now();
diff --git a/src/main/java/org/wooriverygood/api/review/domain/Review.java b/src/main/java/org/wooriverygood/api/review/domain/Review.java
index 787f5f8..2e339a0 100644
--- a/src/main/java/org/wooriverygood/api/review/domain/Review.java
+++ b/src/main/java/org/wooriverygood/api/review/domain/Review.java
@@ -1,6 +1,7 @@
package org.wooriverygood.api.review.domain;
import jakarta.persistence.*;
+import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -9,15 +10,16 @@
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.wooriverygood.api.global.error.exception.AuthorizationException;
import org.wooriverygood.api.course.domain.Course;
+import org.wooriverygood.api.member.domain.Member;
import java.time.LocalDateTime;
import java.util.List;
@Entity
@Getter
-@NoArgsConstructor
-@EntityListeners(AuditingEntityListener.class)
@Table(name = "reviews")
+@EntityListeners(AuditingEntityListener.class)
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Review {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -43,8 +45,8 @@ public class Review {
@Column(name = "grade", length = 45, nullable = false)
private String grade;
- @Column(name = "author_email", length = 300)
- private String authorEmail;
+ @ManyToOne(fetch = FetchType.LAZY)
+ private Member member;
@Column(name = "like_count")
@ColumnDefault("0")
@@ -61,7 +63,9 @@ public class Review {
private boolean updated;
@Builder
- public Review(Long id, Course course, String reviewContent, String reviewTitle, String instructorName, String takenSemyr, String grade, String authorEmail, LocalDateTime createdAt, List reviewLikes, boolean updated) {
+ public Review(Long id, Course course, String reviewContent, String reviewTitle, String instructorName,
+ String takenSemyr, String grade, LocalDateTime createdAt, Member member,
+ List reviewLikes, boolean updated) {
this.id = id;
this.course = course;
this.reviewContent = reviewContent;
@@ -69,20 +73,18 @@ public Review(Long id, Course course, String reviewContent, String reviewTitle,
this.instructorName = instructorName;
this.takenSemyr = takenSemyr;
this.grade = grade;
- this.authorEmail = authorEmail;
this.createdAt = createdAt;
this.reviewLikes = reviewLikes;
this.updated = updated;
+ this.member = member;
}
- public boolean isSameAuthor(String author) {
- return this.authorEmail.equals(author);
+ public boolean isSameAuthor(Member member) {
+ return this.member.isSame(member);
}
- public void validateAuthor(String author) {
- if (!this.authorEmail.equals(author)) {
- throw new AuthorizationException();
- }
+ public void validateAuthor(Member member) {
+ this.member.verify(member);
}
public void addReviewLike(ReviewLike reviewLike) {
@@ -119,9 +121,4 @@ public void updateGrade(String grade) {
updated = true;
}
- public void updateAuthor(String author) {
- authorEmail = author;
- updated = true;
- }
-
}
diff --git a/src/main/java/org/wooriverygood/api/review/domain/ReviewLike.java b/src/main/java/org/wooriverygood/api/review/domain/ReviewLike.java
index 96e0960..bbf5398 100644
--- a/src/main/java/org/wooriverygood/api/review/domain/ReviewLike.java
+++ b/src/main/java/org/wooriverygood/api/review/domain/ReviewLike.java
@@ -1,30 +1,34 @@
package org.wooriverygood.api.review.domain;
import jakarta.persistence.*;
+import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
+import org.wooriverygood.api.member.domain.Member;
@Entity
-@Table(name = "reviewLikes")
@Getter
-@NoArgsConstructor
+@Table(name = "review_likes")
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ReviewLike {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
- @ManyToOne
+ @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "review_id", referencedColumnName = "review_id")
private Review review;
- @Column
- private String username;
+ @ManyToOne(fetch = FetchType.LAZY)
+ private Member member;
+
+
@Builder
- public ReviewLike(Long id, Review review, String username) {
+ public ReviewLike(Long id, Review review, Member member) {
this.id = id;
this.review = review;
- this.username = username;
+ this.member = member;
}
public void delete() { review = null; }
diff --git a/src/main/java/org/wooriverygood/api/review/repository/ReviewLikeRepository.java b/src/main/java/org/wooriverygood/api/review/repository/ReviewLikeRepository.java
index da7077e..f9f5817 100644
--- a/src/main/java/org/wooriverygood/api/review/repository/ReviewLikeRepository.java
+++ b/src/main/java/org/wooriverygood/api/review/repository/ReviewLikeRepository.java
@@ -1,6 +1,7 @@
package org.wooriverygood.api.review.repository;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.wooriverygood.api.member.domain.Member;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.domain.ReviewLike;
@@ -8,7 +9,7 @@
import java.util.Optional;
public interface ReviewLikeRepository extends JpaRepository {
- Optional findByReviewAndUsername(Review review, String username);
- boolean existsByReviewAndUsername(Review review, String username);
+ Optional findByReviewAndMember(Review review, Member member);
+ boolean existsByReviewAndMember(Review review, Member member);
void deleteAllByReview(Review review);
}
diff --git a/src/main/java/org/wooriverygood/api/review/repository/ReviewRepository.java b/src/main/java/org/wooriverygood/api/review/repository/ReviewRepository.java
index ef21a4e..b2957a1 100644
--- a/src/main/java/org/wooriverygood/api/review/repository/ReviewRepository.java
+++ b/src/main/java/org/wooriverygood/api/review/repository/ReviewRepository.java
@@ -4,6 +4,7 @@
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
+import org.wooriverygood.api.member.domain.Member;
import org.wooriverygood.api.review.domain.Review;
import java.util.List;
@@ -13,9 +14,7 @@ public interface ReviewRepository extends JpaRepository {
List findAllByCourseId(Long courseId);
- List findByAuthorEmail(String author);
-
- Optional findTopByAuthorEmailOrderByCreatedAtDesc(String author);
+ Optional findTopByMemberOrderByCreatedAtDesc(Member member);
void deleteAllInBatch();
diff --git a/src/test/java/org/wooriverygood/api/comment/api/CommentApiTest.java b/src/test/java/org/wooriverygood/api/comment/api/CommentApiTest.java
index afe7b04..b364b5b 100644
--- a/src/test/java/org/wooriverygood/api/comment/api/CommentApiTest.java
+++ b/src/test/java/org/wooriverygood/api/comment/api/CommentApiTest.java
@@ -8,6 +8,7 @@
import org.wooriverygood.api.global.error.exception.AuthorizationException;
import org.wooriverygood.api.comment.exception.ReplyDepthException;
import org.wooriverygood.api.comment.dto.*;
+import org.wooriverygood.api.member.domain.Member;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.domain.PostCategory;
import org.wooriverygood.api.global.auth.AuthInfo;
@@ -21,7 +22,6 @@
import static org.mockito.Mockito.*;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
-
class CommentApiTest extends ApiTest {
private List responses = new ArrayList<>();
@@ -31,7 +31,7 @@ class CommentApiTest extends ApiTest {
.category(PostCategory.OFFER)
.title("title6")
.content("content6")
- .author("user-3333")
+ .member(new Member(1L, "username"))
.comments(new ArrayList<>())
.postLikes(new ArrayList<>())
.build();
@@ -42,7 +42,6 @@ void setUp() {
responses.add(CommentResponse.builder()
.commentId(i)
.commentContent("content" + i)
- .commentAuthor("user-"+(i % 5))
.postId(post.getId())
.commentLikeCount((int) i + 8)
.commentTime(LocalDateTime.now())
@@ -50,6 +49,8 @@ void setUp() {
.replies(new ArrayList<>())
.updated(i % 2 == 0)
.reported(false)
+ .memberId(1L)
+ .isMine(true)
.build());
}
for (int i = 12; i <= 15; i++) {
@@ -57,7 +58,8 @@ void setUp() {
.add(ReplyResponse.builder()
.replyId((long) i)
.replyContent("reply content " + i)
- .replyAuthor("user-" + (i % 2))
+ .memberId(1L)
+ .isMine(true)
.replyLikeCount(i - 6)
.replyTime(LocalDateTime.now())
.liked(false)
diff --git a/src/test/java/org/wooriverygood/api/comment/application/CommentCreateServiceTest.java b/src/test/java/org/wooriverygood/api/comment/application/CommentCreateServiceTest.java
index d622f25..8826a3b 100644
--- a/src/test/java/org/wooriverygood/api/comment/application/CommentCreateServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/comment/application/CommentCreateServiceTest.java
@@ -1,6 +1,5 @@
package org.wooriverygood.api.comment.application;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
@@ -10,22 +9,20 @@
import org.wooriverygood.api.comment.dto.NewCommentRequest;
import org.wooriverygood.api.comment.dto.NewReplyRequest;
import org.wooriverygood.api.comment.repository.CommentRepository;
-import org.wooriverygood.api.post.domain.Post;
-import org.wooriverygood.api.post.domain.PostCategory;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.repository.PostRepository;
-import org.wooriverygood.api.util.MockTest;
-import java.util.ArrayList;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-class CommentCreateServiceTest extends MockTest {
+class CommentCreateServiceTest extends CommentServiceTest {
@InjectMocks
private CommentCreateService commentCreateService;
@@ -36,48 +33,22 @@ class CommentCreateServiceTest extends MockTest {
@Mock
private CommentRepository commentRepository;
- private Post post = Post.builder()
- .id(6L)
- .category(PostCategory.OFFER)
- .title("title6")
- .content("content6")
- .author("author6")
- .comments(new ArrayList<>())
- .postLikes(new ArrayList<>())
- .build();
-
- private Comment comment;
-
- private Comment reply;
+ @Mock
+ private MemberRepository memberRepository;
- @BeforeEach
- void setUp() {
- comment = Comment.builder()
- .post(post)
- .build();
- reply = Comment.builder()
- .parent(comment)
- .build();
- }
-
@Test
@DisplayName("특정 게시글의 댓글을 작성한다.")
void addComment() {
- NewCommentRequest newCommentRequest = NewCommentRequest.builder()
+ NewCommentRequest request = NewCommentRequest.builder()
.content("comment content")
.build();
-
- when(commentRepository.save(any(Comment.class)))
- .thenReturn(Comment.builder()
- .author(authInfo.getUsername())
- .content(newCommentRequest.getContent())
- .build());
-
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(postRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(post));
- commentCreateService.addComment(authInfo, 1L, newCommentRequest);
+ commentCreateService.addComment(authInfo, post.getId(), request);
verify(commentRepository).save(any(Comment.class));
}
@@ -88,15 +59,18 @@ void addReply() {
NewReplyRequest request = NewReplyRequest.builder()
.content("reply content")
.build();
-
when(commentRepository.findById(anyLong()))
- .thenReturn(Optional.ofNullable(comment));
+ .thenReturn(Optional.ofNullable(commentWithoutReply));
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
- commentCreateService.addReply(1L, request, authInfo);
- Comment reply = comment.getChildren().get(0);
+ commentCreateService.addReply(commentWithoutReply.getId(), request, authInfo);
- assertThat(reply.getContent()).isEqualTo(request.getContent());
- assertThat(reply.getParent()).isEqualTo(comment);
+ assertAll(
+ () -> assertThat(commentWithoutReply.getReplies().size()).isEqualTo(1),
+ () -> assertThat(commentWithoutReply.getReplies().get(0).getContent()).isEqualTo(request.getContent()),
+ () -> assertThat(commentWithoutReply.getReplies().get(0).getParent()).isEqualTo(commentWithoutReply)
+ );
}
@Test
@@ -105,11 +79,10 @@ void addReply_exception_depth() {
NewReplyRequest request = NewReplyRequest.builder()
.content("reply content")
.build();
-
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(reply));
- assertThatThrownBy(() -> commentCreateService.addReply(1L, request, authInfo))
+ assertThatThrownBy(() -> commentCreateService.addReply(reply.getId(), request, authInfo))
.isInstanceOf(ReplyDepthException.class);
}
diff --git a/src/test/java/org/wooriverygood/api/comment/application/CommentDeleteServiceTest.java b/src/test/java/org/wooriverygood/api/comment/application/CommentDeleteServiceTest.java
index 1e02536..e7075a1 100644
--- a/src/test/java/org/wooriverygood/api/comment/application/CommentDeleteServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/comment/application/CommentDeleteServiceTest.java
@@ -4,20 +4,21 @@
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.wooriverygood.api.comment.domain.Comment;
import org.wooriverygood.api.comment.repository.CommentLikeRepository;
import org.wooriverygood.api.comment.repository.CommentRepository;
import org.wooriverygood.api.global.error.exception.AuthorizationException;
-import org.wooriverygood.api.util.MockTest;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import java.util.Optional;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.*;
-class CommentDeleteServiceTest extends MockTest {
+class CommentDeleteServiceTest extends CommentServiceTest {
@InjectMocks
private CommentDeleteService commentDeleteService;
@@ -29,54 +30,49 @@ class CommentDeleteServiceTest extends MockTest {
private CommentLikeRepository commentLikeRepository;
@Mock
- private Comment comment;
-
- @Mock
- private Comment reply;
+ private MemberRepository memberRepository;
@Test
@DisplayName("권한이 있는 댓글을 삭제한다.")
void deleteComment() {
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(comment));
- when(comment.isParent())
- .thenReturn(true);
- when(comment.hasNoReply())
- .thenReturn(true);
+ comment.deleteReply(reply);
commentDeleteService.deleteComment(comment.getId(), authInfo);
- verify(comment).validateAuthor(authInfo.getUsername());
- verify(commentLikeRepository).deleteAllByComment(comment);
- verify(commentRepository).delete(comment);
+ assertAll(
+ () -> verify(commentLikeRepository).deleteAllByComment(comment),
+ () -> verify(commentRepository).delete(comment)
+ );
}
@Test
@DisplayName("권한이 있는 대댓글을 삭제한다.")
void deleteReply() {
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(reply));
- when(reply.isParent())
- .thenReturn(false);
- when(reply.getParent())
- .thenReturn(comment);
+
commentDeleteService.deleteComment(reply.getId(), authInfo);
- verify(reply).validateAuthor(authInfo.getUsername());
- verify(commentLikeRepository).deleteAllByComment(reply);
- verify(comment).deleteChild(reply);
- verify(commentRepository).delete(reply);
+ assertAll(
+ () -> verify(commentLikeRepository).deleteAllByComment(reply),
+ () -> verify(commentRepository).delete(reply)
+ );
}
@Test
@DisplayName("권한이 없는 대댓글을 삭제할 수 없다.")
void deleteReply_exception_noAuth() {
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.of(new Member(5L, "username")));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(reply));
- doThrow(new AuthorizationException())
- .when(reply)
- .validateAuthor(anyString());
assertThatThrownBy(() -> commentDeleteService.deleteComment(reply.getId(), authInfo))
.isInstanceOf(AuthorizationException.class);
@@ -85,45 +81,43 @@ void deleteReply_exception_noAuth() {
@Test
@DisplayName("부모 댓글을 삭제해도 대댓글은 남아있다.")
void deleteComment_keepChildren() {
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(comment));
- when(comment.isParent())
- .thenReturn(true);
- when(comment.hasNoReply())
- .thenReturn(false);
commentDeleteService.deleteComment(comment.getId(), authInfo);
- verify(comment).willBeDeleted();
+ assertAll(
+ () -> assertThat(comment.isSoftRemoved()).isEqualTo(true),
+ () -> assertThat(comment.canDelete()).isEqualTo(false)
+ );
}
@Test
@DisplayName("특정 대댓글 삭제 후, 삭제 예정으로 처리되고 대댓글이 없는 부모 댓글을 삭제한다.")
void deletePrentAndReply() {
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(reply));
- when(reply.isParent())
- .thenReturn(false);
- when(reply.getParent())
- .thenReturn(comment);
- when(comment.canDelete())
- .thenReturn(true);
+ comment.willBeDeleted();
commentDeleteService.deleteComment(reply.getId(), authInfo);
- verify(comment).deleteChild(reply);
- verify(commentRepository).delete(reply);
- verify(commentRepository).delete(comment);
+ assertAll(
+ () -> verify(commentRepository).delete(reply),
+ () -> verify(commentRepository).delete(comment)
+ );
}
@Test
@DisplayName("권한이 없는 댓글은 삭제할 수 없다")
void deleteComment_exception_noAuth() {
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.of(new Member(5L, "username")));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(comment));
- doThrow(new AuthorizationException())
- .when(comment)
- .validateAuthor(anyString());
assertThatThrownBy(() -> commentDeleteService.deleteComment(comment.getId(), authInfo))
.isInstanceOf(AuthorizationException.class);
diff --git a/src/test/java/org/wooriverygood/api/comment/application/CommentFindServiceTest.java b/src/test/java/org/wooriverygood/api/comment/application/CommentFindServiceTest.java
index 762f447..2fe1f11 100644
--- a/src/test/java/org/wooriverygood/api/comment/application/CommentFindServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/comment/application/CommentFindServiceTest.java
@@ -9,18 +9,18 @@
import org.wooriverygood.api.comment.dto.CommentsResponse;
import org.wooriverygood.api.comment.repository.CommentLikeRepository;
import org.wooriverygood.api.comment.repository.CommentRepository;
-import org.wooriverygood.api.post.domain.Post;
-import org.wooriverygood.api.post.domain.PostCategory;
-import org.wooriverygood.api.util.MockTest;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.when;
-class CommentFindServiceTest extends MockTest {
+class CommentFindServiceTest extends CommentServiceTest {
@InjectMocks
private CommentFindService commentFindService;
@@ -31,28 +31,22 @@ class CommentFindServiceTest extends MockTest {
@Mock
private CommentLikeRepository commentLikeRepository;
+ @Mock
+ private MemberRepository memberRepository;
+
private final int COMMENT_COUNT = 10;
private List comments = new ArrayList<>();
- private Post post = Post.builder()
- .id(6L)
- .category(PostCategory.OFFER)
- .title("title6")
- .content("content6")
- .author("author6")
- .comments(new ArrayList<>())
- .postLikes(new ArrayList<>())
- .build();
@BeforeEach
void setUp() {
- for (int i = 0; i < COMMENT_COUNT; i++) {
+ for (long i = 0; i < COMMENT_COUNT; i++) {
Comment comment = Comment.builder()
- .id((long) i)
+ .id(i)
.content("comment" + i)
- .author("author" + i)
.post(post)
+ .member(member)
.build();
comments.add(comment);
}
@@ -61,9 +55,11 @@ void setUp() {
@Test
@DisplayName("유효한 id를 통해 특정 게시글의 댓글들을 불러온다.")
void findAllCommentsByPostId() {
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findAllByPostId(anyLong()))
.thenReturn(comments);
- when(commentLikeRepository.existsByCommentAndUsername(any(Comment.class), anyString()))
+ when(commentLikeRepository.existsByCommentAndMember(any(Comment.class), any(Member.class)))
.thenReturn(true);
CommentsResponse response = commentFindService.findAllCommentsByPostId(2L, authInfo);
@@ -78,10 +74,12 @@ void findAllCommentsByPostId_softRemoved() {
comments.add(Comment.builder()
.id(1L)
.content("Content")
- .author("Author")
.post(post)
+ .member(member)
.softRemoved(true)
.build());
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findAllByPostId(anyLong()))
.thenReturn(comments);
@@ -93,20 +91,10 @@ void findAllCommentsByPostId_softRemoved() {
@Test
@DisplayName("대댓글만 불러올 수 없다.")
void findAllCommentsByPostId_cannot_only_reply() {
- Comment comment = Comment.builder()
- .id(1L)
- .content("Parent")
- .author("author1")
- .post(post)
- .build();
comments = new ArrayList<>();
- comments.add(Comment.builder()
- .id(2L)
- .content("Child")
- .author("Author2")
- .post(post)
- .parent(comment)
- .build());
+ comments.add(reply);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findAllByPostId(anyLong()))
.thenReturn(comments);
@@ -119,22 +107,10 @@ void findAllCommentsByPostId_cannot_only_reply() {
@DisplayName("댓글과 대댓글들을 모두 불러온다.")
void findAllCommentsByPostId_withReplies() {
comments = new ArrayList<>();
- Comment comment = Comment.builder()
- .id(1L)
- .content("Parent")
- .author("author1")
- .post(post)
- .build();
comments.add(comment);
- Comment reply = Comment.builder()
- .id(2L)
- .content("Child")
- .author("Author2")
- .post(post)
- .parent(comment)
- .build();
comments.add(reply);
- comment.addChildren(reply);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findAllByPostId(anyLong()))
.thenReturn(comments);
diff --git a/src/test/java/org/wooriverygood/api/comment/application/CommentLikeToggleServiceTest.java b/src/test/java/org/wooriverygood/api/comment/application/CommentLikeToggleServiceTest.java
index d20e806..da1da3f 100644
--- a/src/test/java/org/wooriverygood/api/comment/application/CommentLikeToggleServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/comment/application/CommentLikeToggleServiceTest.java
@@ -1,7 +1,5 @@
package org.wooriverygood.api.comment.application;
-import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
@@ -11,18 +9,17 @@
import org.wooriverygood.api.comment.dto.*;
import org.wooriverygood.api.comment.repository.CommentLikeRepository;
import org.wooriverygood.api.comment.repository.CommentRepository;
-import org.wooriverygood.api.post.domain.Post;
-import org.wooriverygood.api.post.domain.PostCategory;
-import org.wooriverygood.api.util.MockTest;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Optional;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.when;
-class CommentLikeToggleServiceTest extends MockTest {
+class CommentLikeToggleServiceTest extends CommentServiceTest {
@InjectMocks
private CommentLikeToggleService commentLikeToggleService;
@@ -33,82 +30,49 @@ class CommentLikeToggleServiceTest extends MockTest {
@Mock
private CommentLikeRepository commentLikeRepository;
- private final int COMMENT_COUNT = 10;
-
- List comments = new ArrayList<>();
-
- private Post post = Post.builder()
- .id(6L)
- .category(PostCategory.OFFER)
- .title("title6")
- .content("content6")
- .author("author6")
- .comments(new ArrayList<>())
- .postLikes(new ArrayList<>())
- .build();
-
- private Comment comment = Comment.builder()
- .id(2L)
- .post(post)
- .content("comment content")
- .author(authInfo.getUsername())
- .commentLikes(new ArrayList<>())
- .build();
-
- private Comment reply = Comment.builder()
- .id(3L)
- .post(post)
- .content("reply content")
- .author(authInfo.getUsername())
- .commentLikes(new ArrayList<>())
- .parent(comment)
- .build();
-
-
- @BeforeEach
- void setUpPosts() {
- comment.getChildren().add(reply);
-
- for (int i = 0; i < COMMENT_COUNT; i++) {
- Comment comment = Comment.builder()
- .id((long) i)
- .content("comment" + i)
- .author("author" + i)
- .post(post)
- .build();
- comments.add(comment);
- }
- }
+ @Mock
+ private MemberRepository memberRepository;
+
@Test
@DisplayName("특정 댓글의 좋아요를 1 올린다.")
void likeComment_up() {
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(comment));
+ when(commentLikeRepository.findByCommentAndMember(any(Comment.class), any(Member.class)))
+ .thenReturn(Optional.empty());
CommentLikeResponse response = commentLikeToggleService.likeComment(comment.getId(), authInfo);
- Assertions.assertThat(response.getLikeCount()).isEqualTo(comment.getLikeCount() + 1);
- Assertions.assertThat(response.isLiked()).isEqualTo(true);
+ assertAll(
+ () -> assertThat(response.getLikeCount()).isEqualTo(comment.getLikeCount() + 1),
+ () -> assertThat(response.isLiked()).isEqualTo(true)
+ );
}
@Test
@DisplayName("특정 댓글의 좋아요를 1 내린다.")
void likeComment_down() {
CommentLike commentLike = CommentLike.builder()
- .id(2L)
+ .id(1L)
.comment(comment)
- .username(authInfo.getUsername())
+ .member(member)
.build();
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(comment));
- when(commentLikeRepository.findByCommentAndUsername(any(Comment.class), anyString()))
+ when(commentLikeRepository.findByCommentAndMember(any(Comment.class), any(Member.class)))
.thenReturn(Optional.ofNullable(commentLike));
CommentLikeResponse response = commentLikeToggleService.likeComment(comment.getId(), authInfo);
- Assertions.assertThat(response.getLikeCount()).isEqualTo(comment.getLikeCount() - 1);
- Assertions.assertThat(response.isLiked()).isEqualTo(false);
+ assertAll(
+ () -> assertThat(response.getLikeCount()).isEqualTo(comment.getLikeCount() - 1),
+ () -> assertThat(response.isLiked()).isEqualTo(false)
+ );
}
}
\ No newline at end of file
diff --git a/src/test/java/org/wooriverygood/api/comment/application/CommentServiceTest.java b/src/test/java/org/wooriverygood/api/comment/application/CommentServiceTest.java
new file mode 100644
index 0000000..b436d21
--- /dev/null
+++ b/src/test/java/org/wooriverygood/api/comment/application/CommentServiceTest.java
@@ -0,0 +1,57 @@
+package org.wooriverygood.api.comment.application;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.wooriverygood.api.comment.domain.Comment;
+import org.wooriverygood.api.post.domain.Post;
+import org.wooriverygood.api.post.domain.PostCategory;
+import org.wooriverygood.api.util.MockTest;
+
+import java.util.ArrayList;
+
+public class CommentServiceTest extends MockTest {
+
+ protected Post post;
+
+ protected Comment comment;
+
+ protected Comment commentWithoutReply;
+
+ protected Comment reply;
+
+
+ @BeforeEach
+ void dateSetUp() {
+ post = Post.builder()
+ .id(1L)
+ .category(PostCategory.OFFER)
+ .title("simple title")
+ .content("simple content")
+ .member(member)
+ .comments(new ArrayList<>())
+ .postLikes(new ArrayList<>())
+ .build();
+ comment = Comment.builder()
+ .id(1L)
+ .content("content")
+ .post(post)
+ .member(member)
+ .commentLikes(new ArrayList<>())
+ .reports(new ArrayList<>())
+ .build();
+ reply = Comment.builder()
+ .id(2L)
+ .content("content")
+ .post(post)
+ .parent(comment)
+ .member(member)
+ .build();
+ comment.addReply(reply);
+ commentWithoutReply = Comment.builder()
+ .id(3L)
+ .content("content")
+ .post(post)
+ .member(member)
+ .build();
+ }
+
+}
diff --git a/src/test/java/org/wooriverygood/api/comment/application/CommentUpdateServiceTest.java b/src/test/java/org/wooriverygood/api/comment/application/CommentUpdateServiceTest.java
index 5121407..3baea56 100644
--- a/src/test/java/org/wooriverygood/api/comment/application/CommentUpdateServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/comment/application/CommentUpdateServiceTest.java
@@ -1,28 +1,24 @@
package org.wooriverygood.api.comment.application;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.wooriverygood.api.comment.domain.Comment;
import org.wooriverygood.api.comment.dto.CommentUpdateRequest;
import org.wooriverygood.api.comment.repository.CommentRepository;
-import org.wooriverygood.api.global.auth.AuthInfo;
import org.wooriverygood.api.global.error.exception.AuthorizationException;
-import org.wooriverygood.api.post.domain.Post;
-import org.wooriverygood.api.post.domain.PostCategory;
-import org.wooriverygood.api.util.MockTest;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
-import java.util.ArrayList;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.when;
-class CommentUpdateServiceTest extends MockTest {
+class CommentUpdateServiceTest extends CommentServiceTest {
@InjectMocks
private CommentUpdateService commentUpdateService;
@@ -30,29 +26,9 @@ class CommentUpdateServiceTest extends MockTest {
@Mock
private CommentRepository commentRepository;
- private Post post = Post.builder()
- .id(6L)
- .category(PostCategory.OFFER)
- .title("title6")
- .content("content6")
- .author("author6")
- .comments(new ArrayList<>())
- .postLikes(new ArrayList<>())
- .build();
-
- private Comment comment;
-
+ @Mock
+ private MemberRepository memberRepository;
- @BeforeEach
- void setUp() {
- comment = Comment.builder()
- .id(2L)
- .post(post)
- .content("comment content")
- .author(authInfo.getUsername())
- .commentLikes(new ArrayList<>())
- .build();
- }
@Test
@DisplayName("권한이 있는 댓글을 수정한다.")
@@ -60,14 +36,17 @@ void updateComment() {
CommentUpdateRequest request = CommentUpdateRequest.builder()
.content("new comment content")
.build();
-
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(comment));
commentUpdateService.updateComment(comment.getId(), request, authInfo);
- assertThat(comment.isUpdated()).isEqualTo(true);
- assertThat(comment.getContent()).isEqualTo(request.getContent());
+ assertAll(
+ () -> assertThat(comment.isUpdated()).isEqualTo(true),
+ () -> assertThat(comment.getContent()).isEqualTo(request.getContent())
+ );
}
@Test
@@ -76,15 +55,12 @@ void updateComment_exception_noAuth() {
CommentUpdateRequest request = CommentUpdateRequest.builder()
.content("new comment content")
.build();
- AuthInfo noAuthInfo = AuthInfo.builder()
- .sub("no")
- .username("no")
- .build();
-
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(new Member(5L, "username")));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(comment));
- assertThatThrownBy(() -> commentUpdateService.updateComment(comment.getId(), request, noAuthInfo))
+ assertThatThrownBy(() -> commentUpdateService.updateComment(comment.getId(), request, authInfo))
.isInstanceOf(AuthorizationException.class);
}
diff --git a/src/test/java/org/wooriverygood/api/post/api/PostApiTest.java b/src/test/java/org/wooriverygood/api/post/api/PostApiTest.java
index 82a0f4c..a86351c 100644
--- a/src/test/java/org/wooriverygood/api/post/api/PostApiTest.java
+++ b/src/test/java/org/wooriverygood/api/post/api/PostApiTest.java
@@ -56,6 +56,8 @@ void findPostsByCategory() {
.liked(i % 6 == 0)
.updated(i % 9 == 0)
.reported(false)
+ .memberId(1L)
+ .isMine(false)
.build());
when(postFindService.findPosts(any(AuthInfo.class), any(Pageable.class), anyString()))
@@ -89,6 +91,8 @@ void findPost() {
.liked(false)
.updated(false)
.reported(false)
+ .memberId(1L)
+ .isMine(false)
.build());
restDocs
diff --git a/src/test/java/org/wooriverygood/api/post/application/PostCreateServiceTest.java b/src/test/java/org/wooriverygood/api/post/application/PostCreateServiceTest.java
index 42b4581..ca0e67e 100644
--- a/src/test/java/org/wooriverygood/api/post/application/PostCreateServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/post/application/PostCreateServiceTest.java
@@ -1,20 +1,24 @@
package org.wooriverygood.api.post.application;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.dto.NewPostRequest;
import org.wooriverygood.api.post.exception.InvalidPostCategoryException;
import org.wooriverygood.api.post.repository.PostRepository;
-import org.wooriverygood.api.global.auth.AuthInfo;
import org.wooriverygood.api.util.MockTest;
+import java.util.Optional;
+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
class PostCreateServiceTest extends MockTest {
@@ -24,15 +28,9 @@ class PostCreateServiceTest extends MockTest {
@Mock
private PostRepository postRepository;
- private AuthInfo authInfo;
+ @Mock
+ private MemberRepository memberRepository;
- @BeforeEach
- void setUp() {
- authInfo = AuthInfo.builder()
- .sub("22222-34534-123")
- .username("22222-34534-123")
- .build();
- }
@Test
@DisplayName("새로운 게시글을 작성한다.")
@@ -42,6 +40,8 @@ void addPost() {
.postCategory("자유")
.postContent("content")
.build();
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
postCreateService.addPost(authInfo, request);
@@ -57,6 +57,9 @@ void addPost_exception_invalid_category() {
.postContent("content")
.build();
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+
assertThatThrownBy(() -> postCreateService.addPost(authInfo, newPostRequest))
.isInstanceOf(InvalidPostCategoryException.class);
}
diff --git a/src/test/java/org/wooriverygood/api/post/application/PostDeleteServiceTest.java b/src/test/java/org/wooriverygood/api/post/application/PostDeleteServiceTest.java
index 4d04c48..bb3a8c0 100644
--- a/src/test/java/org/wooriverygood/api/post/application/PostDeleteServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/post/application/PostDeleteServiceTest.java
@@ -1,28 +1,26 @@
package org.wooriverygood.api.post.application;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.Mockito;
import org.wooriverygood.api.global.error.exception.AuthorizationException;
import org.wooriverygood.api.comment.repository.CommentRepository;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
-import org.wooriverygood.api.post.domain.PostCategory;
import org.wooriverygood.api.post.repository.PostLikeRepository;
import org.wooriverygood.api.post.repository.PostRepository;
-import org.wooriverygood.api.global.auth.AuthInfo;
-import org.wooriverygood.api.util.MockTest;
-import java.util.ArrayList;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.mockito.ArgumentMatchers.any;
+import static org.junit.jupiter.api.Assertions.assertAll;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
-class PostDeleteServiceTest extends MockTest {
+class PostDeleteServiceTest extends PostServiceTest {
@InjectMocks
private PostDeleteService postDeleteService;
@@ -36,57 +34,42 @@ class PostDeleteServiceTest extends MockTest {
@Mock
private PostLikeRepository postLikeRepository;
- private Post singlePost;
-
- private AuthInfo authInfo;
-
- @BeforeEach
- void setUp() {
- authInfo = AuthInfo.builder()
- .sub("22222-34534-123")
- .username("22222-34534-123")
- .build();
+ @Mock
+ private MemberRepository memberRepository;
- singlePost = Post.builder()
- .id(6L)
- .category(PostCategory.OFFER)
- .title("title6")
- .content("content6")
- .author(authInfo.getUsername())
- .comments(new ArrayList<>())
- .postLikes(new ArrayList<>())
- .build();
- }
@Test
@DisplayName("권한이 있는 게시글을 삭제한다.")
void deletePost() {
- Mockito.when(postRepository.findById(any(Long.class)))
- .thenReturn(Optional.ofNullable(singlePost));
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(postRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(post));
- postDeleteService.deletePost(authInfo, singlePost.getId());
+ postDeleteService.deletePost(authInfo, post.getId());
- verify(commentRepository).deleteAllByPost(singlePost);
- verify(postLikeRepository).deleteAllByPost(singlePost);
+ assertAll(
+ () -> verify(commentRepository).deleteAllByPost(post),
+ () -> verify(postLikeRepository).deleteAllByPost(post)
+ );
}
@Test
- @DisplayName("권한이 없는 게시글을 삭제한다.")
+ @DisplayName("권한이 없는 게시글을 삭제하면 예외가 발생한다.")
void deletePost_exception_noAuth() {
Post noAuthPost = Post.builder()
- .id(99L)
- .category(PostCategory.OFFER)
- .title("title99")
- .content("content99")
- .author("43434-45654-234")
- .comments(new ArrayList<>())
- .postLikes(new ArrayList<>())
+ .id(9L)
+ .title("title")
+ .content("content")
+ .member(new Member(5L, "username"))
.build();
- Mockito.when(postRepository.findById(any(Long.class)))
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(postRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(noAuthPost));
- assertThatThrownBy(() -> postDeleteService.deletePost(authInfo, singlePost.getId()))
+ assertThatThrownBy(() -> postDeleteService.deletePost(authInfo, post.getId()))
.isInstanceOf(AuthorizationException.class);
}
diff --git a/src/test/java/org/wooriverygood/api/post/application/PostFindServiceTest.java b/src/test/java/org/wooriverygood/api/post/application/PostFindServiceTest.java
index 3d75646..d557dcc 100644
--- a/src/test/java/org/wooriverygood/api/post/application/PostFindServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/post/application/PostFindServiceTest.java
@@ -1,6 +1,5 @@
package org.wooriverygood.api.post.application;
-import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -9,6 +8,8 @@
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.domain.PostCategory;
import org.wooriverygood.api.post.dto.PostDetailResponse;
@@ -16,19 +17,19 @@
import org.wooriverygood.api.post.exception.PostNotFoundException;
import org.wooriverygood.api.post.repository.PostLikeRepository;
import org.wooriverygood.api.post.repository.PostRepository;
-import org.wooriverygood.api.global.auth.AuthInfo;
-import org.wooriverygood.api.util.MockTest;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.when;
-
-class PostFindServiceTest extends MockTest {
+class PostFindServiceTest extends PostServiceTest {
@InjectMocks
private PostFindService postFindService;
@@ -39,30 +40,30 @@ class PostFindServiceTest extends MockTest {
@Mock
private PostLikeRepository postLikeRepository;
+ @Mock
+ private MemberRepository memberRepository;
+
private List posts = new ArrayList<>();
private List myPosts = new ArrayList<>();
private List freePosts = new ArrayList<>();
- private AuthInfo authInfo;
-
private final int POST_COUNT = 23;
+
@BeforeEach
void setUp() {
- authInfo = AuthInfo.builder()
- .sub("22222-34534-123")
- .username("22222-34534-123")
- .build();
-
+ posts.clear();
+ myPosts.clear();
+ freePosts.clear();
for (long i = 1; i <= POST_COUNT; i++) {
Post post = Post.builder()
.id(i)
.category(PostCategory.FREE)
.title("title" + i)
.content("content" + i)
- .author(authInfo.getUsername())
+ .member(member)
.comments(new ArrayList<>())
.postLikes(new ArrayList<>())
.build();
@@ -75,7 +76,7 @@ void setUp() {
}
@Test
- @DisplayName("로그인 한 상황에서 게시글을 불러온다.")
+ @DisplayName("로그인 한 상황에서 모든 카테고리의 게시글을 불러온다.")
void findPosts_login() {
Pageable pageable = PageRequest.of(0, 10);
@@ -85,12 +86,18 @@ void findPosts_login() {
PageImpl page = new PageImpl<>(posts, pageable, this.posts.size());
when(postRepository.findAllByOrderByIdDesc(any(PageRequest.class)))
.thenReturn(page);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(postLikeRepository.existsByPostAndMember(any(Post.class), any(Member.class)))
+ .thenReturn(true);
PostsResponse response = postFindService.findPosts(authInfo, pageable, "");
- assertThat(response.getPosts().size()).isEqualTo(10);
- assertThat(response.getTotalPageCount()).isEqualTo(3);
- assertThat(response.getTotalPostCount()).isEqualTo(POST_COUNT);
+ assertAll(
+ () -> assertThat(response.getPosts().size()).isEqualTo(10),
+ () -> assertThat(response.getTotalPageCount()).isEqualTo(3),
+ () -> assertThat(response.getTotalPostCount()).isEqualTo(POST_COUNT)
+ );
}
@Test
@@ -103,32 +110,29 @@ void findPosts_category_free() {
PageImpl page = new PageImpl<>(posts, pageable, this.freePosts.size());
when(postRepository.findAllByCategoryOrderByIdDesc(any(PostCategory.class), any(PageRequest.class)))
.thenReturn(page);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
PostsResponse response = postFindService.findPosts(authInfo, pageable, "자유");
- assertThat(response.getPosts().size()).isEqualTo(10);
- assertThat(response.getTotalPageCount()).isEqualTo(2);
- assertThat(response.getTotalPostCount()).isEqualTo(14);
+ assertAll(
+ () -> assertThat(response.getPosts().size()).isEqualTo(10),
+ () -> assertThat(response.getTotalPageCount()).isEqualTo(2),
+ () -> assertThat(response.getTotalPostCount()).isEqualTo(14)
+ );
}
@Test
@DisplayName("유효한 id를 이용하여 특정 게시글을 불러온다.")
void findPostById() {
- Post singlePost = Post.builder()
- .id(6L)
- .category(PostCategory.OFFER)
- .title("title6")
- .content("content6")
- .author(authInfo.getUsername())
- .comments(new ArrayList<>())
- .postLikes(new ArrayList<>())
- .build();
- when(postRepository.findById(any()))
- .thenReturn(Optional.ofNullable(singlePost));
+ when(postRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(post));
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
PostDetailResponse response = postFindService.findPostById(6L, authInfo);
- assertThat(response).isNotNull();
+ assertThat(response.getPostId()).isEqualTo(post.getId());
}
@Test
@@ -137,7 +141,7 @@ void findPostById_exception_invalidId() {
when(postRepository.findById(any()))
.thenThrow(PostNotFoundException.class);
- Assertions.assertThatThrownBy(() -> postFindService.findPostById(6L, authInfo))
+ assertThatThrownBy(() -> postFindService.findPostById(6L, authInfo))
.isInstanceOf(PostNotFoundException.class);
}
@@ -150,14 +154,18 @@ void findMyPosts() {
int end = Math.min(start + pageable.getPageSize(), this.myPosts.size());
List posts = this.myPosts.subList(start, end);
PageImpl page = new PageImpl<>(posts, pageable, this.myPosts.size());
- when(postRepository.findByAuthorOrderByIdDesc(any(String.class), any(PageRequest.class)))
+ when(postRepository.findByMemberOrderByIdDesc(any(Member.class), any(PageRequest.class)))
.thenReturn(page);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
PostsResponse response = postFindService.findMyPosts(authInfo, pageable);
- assertThat(response.getPosts().size()).isEqualTo(10);
- assertThat(response.getTotalPageCount()).isEqualTo(2);
- assertThat(response.getTotalPostCount()).isEqualTo(14);
+ assertAll(
+ () -> assertThat(response.getPosts().size()).isEqualTo(10),
+ () -> assertThat(response.getTotalPageCount()).isEqualTo(2),
+ () -> assertThat(response.getTotalPostCount()).isEqualTo(14)
+ );
}
}
\ No newline at end of file
diff --git a/src/test/java/org/wooriverygood/api/post/application/PostLikeToggleServiceTest.java b/src/test/java/org/wooriverygood/api/post/application/PostLikeToggleServiceTest.java
index ef265ce..c4722e6 100644
--- a/src/test/java/org/wooriverygood/api/post/application/PostLikeToggleServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/post/application/PostLikeToggleServiceTest.java
@@ -1,26 +1,25 @@
package org.wooriverygood.api.post.application;
-import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
-import org.wooriverygood.api.post.domain.PostCategory;
import org.wooriverygood.api.post.domain.PostLike;
import org.wooriverygood.api.post.dto.PostLikeResponse;
import org.wooriverygood.api.post.repository.PostLikeRepository;
import org.wooriverygood.api.post.repository.PostRepository;
-import org.wooriverygood.api.global.auth.AuthInfo;
-import org.wooriverygood.api.util.MockTest;
-import java.util.ArrayList;
import java.util.Optional;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.when;
-class PostLikeToggleServiceTest extends MockTest {
+class PostLikeToggleServiceTest extends PostServiceTest {
@InjectMocks
private PostLikeToggleService postLikeToggleService;
@@ -31,31 +30,26 @@ class PostLikeToggleServiceTest extends MockTest {
@Mock
private PostLikeRepository postLikeRepository;
- private AuthInfo authInfo = AuthInfo.builder()
- .sub("")
- .username("22222-34534-123")
- .build();
-
- private Post post = Post.builder()
- .id(6L)
- .category(PostCategory.OFFER)
- .title("title6")
- .content("content6")
- .author(authInfo.getUsername())
- .comments(new ArrayList<>())
- .postLikes(new ArrayList<>())
- .build();
+ @Mock
+ private MemberRepository memberRepository;
+
@Test
@DisplayName("특정 게시글에 좋아요를 1 올린다.")
void likePost_up() {
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(postRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(post));
+ when(postLikeRepository.findByPostAndMember(any(Post.class), any(Member.class)))
+ .thenReturn(Optional.empty());
PostLikeResponse response = postLikeToggleService.togglePostLike(post.getId(), authInfo);
- Assertions.assertThat(response.getLikeCount()).isEqualTo(post.getLikeCount() + 1);
- Assertions.assertThat(response.isLiked()).isEqualTo(true);
+ assertAll(
+ () -> assertThat(response.getLikeCount()).isEqualTo(post.getLikeCount() + 1),
+ () -> assertThat(response.isLiked()).isEqualTo(true)
+ );
}
@Test
@@ -64,17 +58,21 @@ void likePost_down() {
PostLike postLike = PostLike.builder()
.id(1L)
.post(post)
- .username(authInfo.getUsername())
+ .member(member)
.build();
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(postRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(post));
- when(postLikeRepository.findByPostAndUsername(any(Post.class), anyString()))
+ when(postLikeRepository.findByPostAndMember(any(Post.class), any(Member.class)))
.thenReturn(Optional.ofNullable(postLike));
PostLikeResponse response = postLikeToggleService.togglePostLike(postLike.getId(), authInfo);
- Assertions.assertThat(response.getLikeCount()).isEqualTo(post.getLikeCount() - 1);
- Assertions.assertThat(response.isLiked()).isEqualTo(false);
+ assertAll(
+ () -> assertThat(response.getLikeCount()).isEqualTo(post.getLikeCount() - 1),
+ () -> assertThat(response.isLiked()).isEqualTo(false)
+ );
}
}
\ No newline at end of file
diff --git a/src/test/java/org/wooriverygood/api/post/application/PostServiceTest.java b/src/test/java/org/wooriverygood/api/post/application/PostServiceTest.java
new file mode 100644
index 0000000..6b944df
--- /dev/null
+++ b/src/test/java/org/wooriverygood/api/post/application/PostServiceTest.java
@@ -0,0 +1,28 @@
+package org.wooriverygood.api.post.application;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.wooriverygood.api.post.domain.Post;
+import org.wooriverygood.api.post.domain.PostCategory;
+import org.wooriverygood.api.util.MockTest;
+
+import java.util.ArrayList;
+
+public class PostServiceTest extends MockTest {
+
+ protected Post post;
+
+ @BeforeEach
+ void dateSetUp() {
+ post = Post.builder()
+ .id(1L)
+ .category(PostCategory.OFFER)
+ .title("simple title")
+ .content("simple content")
+ .member(member)
+ .comments(new ArrayList<>())
+ .postLikes(new ArrayList<>())
+ .reports(new ArrayList<>())
+ .build();
+ }
+
+}
diff --git a/src/test/java/org/wooriverygood/api/post/application/PostUpdateServiceTest.java b/src/test/java/org/wooriverygood/api/post/application/PostUpdateServiceTest.java
index 70c113d..22a5b59 100644
--- a/src/test/java/org/wooriverygood/api/post/application/PostUpdateServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/post/application/PostUpdateServiceTest.java
@@ -1,25 +1,27 @@
package org.wooriverygood.api.post.application;
-import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.wooriverygood.api.global.error.exception.AuthorizationException;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.domain.Post;
import org.wooriverygood.api.post.domain.PostCategory;
import org.wooriverygood.api.post.dto.PostUpdateRequest;
import org.wooriverygood.api.post.repository.PostRepository;
-import org.wooriverygood.api.global.auth.AuthInfo;
-import org.wooriverygood.api.util.MockTest;
import java.util.ArrayList;
import java.util.Optional;
-import static org.mockito.ArgumentMatchers.any;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertAll;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.when;
-class PostUpdateServiceTest extends MockTest {
+class PostUpdateServiceTest extends PostServiceTest {
@InjectMocks
private PostUpdateService postUpdateService;
@@ -27,32 +29,20 @@ class PostUpdateServiceTest extends MockTest {
@Mock
private PostRepository postRepository;
- private AuthInfo authInfo = AuthInfo.builder()
- .sub("")
- .username("22222-34534-123")
- .build();
-
@Mock
- private Post post = Post.builder()
- .id(6L)
- .category(PostCategory.OFFER)
- .title("title6")
- .content("content6")
- .author(authInfo.getUsername())
- .comments(new ArrayList<>())
- .postLikes(new ArrayList<>())
- .build();
+ private MemberRepository memberRepository;
private Post noAuthPost = Post.builder()
.id(99L)
.category(PostCategory.OFFER)
.title("title99")
.content("content99")
- .author("43434-45654-234")
+ .member(new Member(5L, "username"))
.comments(new ArrayList<>())
.postLikes(new ArrayList<>())
.build();
+
@Test
@DisplayName("권한이 있는 게시글을 수정한다.")
void updatePost() {
@@ -60,12 +50,17 @@ void updatePost() {
.postTitle("new title")
.postContent("new content")
.build();
-
- when(postRepository.findById(any(Long.class)))
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(postRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(post));
postUpdateService.updatePost(post.getId(), request, authInfo);
+ assertAll(
+ () -> assertThat(post.getTitle()).isEqualTo(request.getPostTitle()),
+ () -> assertThat(post.getContent()).isEqualTo(request.getPostContent())
+ );
}
@Test
@@ -75,11 +70,12 @@ void updatePost_exception_noAuth() {
.postTitle("new title")
.postContent("new content")
.build();
-
- when(postRepository.findById(any(Long.class)))
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(postRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(noAuthPost));
- Assertions.assertThatThrownBy(() -> postUpdateService.updatePost(noAuthPost.getId(), request, authInfo))
+ assertThatThrownBy(() -> postUpdateService.updatePost(noAuthPost.getId(), request, authInfo))
.isInstanceOf(AuthorizationException.class);
}
diff --git a/src/test/java/org/wooriverygood/api/report/application/CommentReportServiceTest.java b/src/test/java/org/wooriverygood/api/report/application/CommentReportServiceTest.java
index 47988c3..55961e3 100644
--- a/src/test/java/org/wooriverygood/api/report/application/CommentReportServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/report/application/CommentReportServiceTest.java
@@ -1,10 +1,15 @@
package org.wooriverygood.api.report.application;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
+import org.wooriverygood.api.comment.application.CommentServiceTest;
import org.wooriverygood.api.comment.exception.CommentNotFoundException;
+import org.wooriverygood.api.member.repository.MemberRepository;
+import org.wooriverygood.api.post.domain.Post;
+import org.wooriverygood.api.post.domain.PostCategory;
import org.wooriverygood.api.report.domain.CommentReport;
import org.wooriverygood.api.report.exception.DuplicatedCommentReportException;
import org.wooriverygood.api.comment.domain.Comment;
@@ -14,14 +19,17 @@
import org.wooriverygood.api.global.auth.AuthInfo;
import org.wooriverygood.api.util.MockTest;
+import java.util.ArrayList;
import java.util.Optional;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-class CommentReportServiceTest extends MockTest {
+class CommentReportServiceTest extends CommentServiceTest {
@InjectMocks
private CommentReportService commentReportService;
@@ -32,53 +40,54 @@ class CommentReportServiceTest extends MockTest {
@Mock
private CommentReportRepository commentReportRepository;
- private AuthInfo authInfo = AuthInfo.builder()
- .sub("22432-12312-3531")
- .username("22432-12312-3531")
- .build();
-
@Mock
- private Comment comment;
-
+ private MemberRepository memberRepository;
+
+ private Post post;
+
+
+ @BeforeEach
+ void setUp() {
+ post = Post.builder()
+ .id(6L)
+ .category(PostCategory.OFFER)
+ .title("title6")
+ .content("content6")
+ .member(member)
+ .comments(new ArrayList<>())
+ .postLikes(new ArrayList<>())
+ .build();
+ }
@Test
@DisplayName("유효한 id를 통해 특정 댓글을 신고한다.")
void reportComment() {
ReportRequest request = new ReportRequest("report message");
- when(comment.hasReportByUser(anyString()))
- .thenReturn(false);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(comment));
- commentReportService.reportComment(1L, request, authInfo);
-
- verify(comment).hasReportByUser(authInfo.getUsername());
- verify(comment).addReport(any(CommentReport.class));
- verify(commentRepository).increaseReportCount(anyLong());
- verify(commentReportRepository).save(any(CommentReport.class));
- }
-
- @Test
- @DisplayName("신고하려는 댓글의 id가 유효하지 않으면 예외를 발생한다.")
- void reportComment_exception_invalidId() {
- ReportRequest request = new ReportRequest("report message");
-
- when(commentRepository.findById(anyLong()))
- .thenThrow(new CommentNotFoundException());
+ commentReportService.reportComment(comment.getId(), request, authInfo);
- assertThatThrownBy(() -> commentReportService.reportComment(1L, request, authInfo))
- .isInstanceOf(CommentNotFoundException.class);
+ assertAll(
+ () -> assertThat(comment.getReports().size()).isEqualTo(1),
+ () -> verify(commentRepository).increaseReportCount(comment.getId()),
+ () -> verify(commentReportRepository).save(any(CommentReport.class))
+ );
}
@Test
@DisplayName("동일한 댓글을 한 번 이상 신고하면 예외를 발생한다.")
void reportComment_exception_duplicated() {
ReportRequest request = new ReportRequest("report message");
- when(comment.hasReportByUser(anyString()))
- .thenReturn(true);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(commentRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(comment));
+ commentReportService.reportComment(comment.getId(), request, authInfo);
+
assertThatThrownBy(() -> commentReportService.reportComment(1L, request, authInfo))
.isInstanceOf(DuplicatedCommentReportException.class);
}
diff --git a/src/test/java/org/wooriverygood/api/report/application/PostReportServiceTest.java b/src/test/java/org/wooriverygood/api/report/application/PostReportServiceTest.java
index d778050..f5fe642 100644
--- a/src/test/java/org/wooriverygood/api/report/application/PostReportServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/report/application/PostReportServiceTest.java
@@ -4,24 +4,25 @@
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.wooriverygood.api.global.auth.AuthInfo;
-import org.wooriverygood.api.post.domain.Post;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
+import org.wooriverygood.api.post.application.PostServiceTest;
import org.wooriverygood.api.post.exception.PostNotFoundException;
import org.wooriverygood.api.post.repository.PostRepository;
import org.wooriverygood.api.report.domain.PostReport;
import org.wooriverygood.api.report.dto.ReportRequest;
import org.wooriverygood.api.report.exception.DuplicatedPostReportException;
import org.wooriverygood.api.report.repository.PostReportRepository;
-import org.wooriverygood.api.util.MockTest;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-class PostReportServiceTest extends MockTest {
+class PostReportServiceTest extends PostServiceTest {
@InjectMocks
private PostReportService postReportService;
@@ -32,41 +33,37 @@ class PostReportServiceTest extends MockTest {
@Mock
private PostReportRepository postReportRepository;
- private AuthInfo authInfo = AuthInfo.builder()
- .sub("22432-12312-3531")
- .username("22432-12312-3531")
- .build();
-
@Mock
- private Post post;
+ private MemberRepository memberRepository;
@Test
@DisplayName("유효한 id를 통해 특정 게시글을 신고한다.")
void reportPost() {
ReportRequest request = new ReportRequest("report message");
- when(post.hasReportByUser(anyString()))
- .thenReturn(false);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(postRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(post));
postReportService.reportPost(1L, request, authInfo);
- verify(post).hasReportByUser(authInfo.getUsername());
- verify(post).addReport(any(PostReport.class));
- verify(postRepository).increaseReportCount(anyLong());
- verify(postReportRepository).save(any(PostReport.class));
+ assertAll(
+ () -> verify(postRepository).increaseReportCount(post.getId()),
+ () -> verify(postReportRepository).save(any(PostReport.class))
+ );
}
@Test
@DisplayName("신고하려는 게시글 id가 유효하지 않으면 예외를 발생한다.")
void reportPost_exception_invalidId() {
ReportRequest request = new ReportRequest("report message");
-
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(postRepository.findById(anyLong()))
.thenThrow(new PostNotFoundException());
- assertThatThrownBy(() -> postReportService.reportPost(1L, request, authInfo))
+ assertThatThrownBy(() -> postReportService.reportPost(post.getId(), request, authInfo))
.isInstanceOf(PostNotFoundException.class);
}
@@ -74,12 +71,13 @@ void reportPost_exception_invalidId() {
@DisplayName("동일한 게시글을 한 번 이상 신고하면 예외를 발생한다.")
void reportPost_exception_duplicated() {
ReportRequest request = new ReportRequest("report message");
- when(post.hasReportByUser(anyString()))
- .thenReturn(true);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
when(postRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(post));
+ postReportService.reportPost(post.getId(), request, authInfo);
- assertThatThrownBy(() -> postReportService.reportPost(1L, request, authInfo))
+ assertThatThrownBy(() -> postReportService.reportPost(post.getId(), request, authInfo))
.isInstanceOf(DuplicatedPostReportException.class);
}
diff --git a/src/test/java/org/wooriverygood/api/review/application/ReviewCreateServiceTest.java b/src/test/java/org/wooriverygood/api/review/application/ReviewCreateServiceTest.java
index dda08e1..a5ac22d 100644
--- a/src/test/java/org/wooriverygood/api/review/application/ReviewCreateServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/review/application/ReviewCreateServiceTest.java
@@ -7,6 +7,7 @@
import org.wooriverygood.api.course.domain.Course;
import org.wooriverygood.api.course.repository.CourseRepository;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.dto.NewReviewRequest;
import org.wooriverygood.api.review.repository.ReviewRepository;
@@ -14,6 +15,7 @@
import java.util.Optional;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.*;
@@ -29,10 +31,8 @@ class ReviewCreateServiceTest extends MockTest {
@Mock
private ReviewRepository reviewRepository;
- private AuthInfo authInfo = AuthInfo.builder()
- .sub("22222-34534-123")
- .username("22222-34534-123")
- .build();
+ @Mock
+ private MemberRepository memberRepository;
private Course course = Course.builder()
.id(1L)
@@ -57,11 +57,15 @@ void addReview() {
when(courseRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(course));
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
reviewCreateService.addReview(authInfo, 1L, request);
- verify(reviewRepository).save(any(Review.class));
- verify(courseRepository).increaseReviewCount(course.getId());
+ assertAll(
+ () -> verify(reviewRepository).save(any(Review.class)),
+ () -> verify(courseRepository).increaseReviewCount(course.getId())
+ );
}
}
\ No newline at end of file
diff --git a/src/test/java/org/wooriverygood/api/review/application/ReviewDeleteServiceTest.java b/src/test/java/org/wooriverygood/api/review/application/ReviewDeleteServiceTest.java
index bad8f86..0099a3b 100644
--- a/src/test/java/org/wooriverygood/api/review/application/ReviewDeleteServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/review/application/ReviewDeleteServiceTest.java
@@ -1,13 +1,15 @@
package org.wooriverygood.api.review.application;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.wooriverygood.api.course.domain.Course;
import org.wooriverygood.api.course.repository.CourseRepository;
-import org.wooriverygood.api.global.auth.AuthInfo;
import org.wooriverygood.api.global.error.exception.AuthorizationException;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.exception.ReviewNotFoundException;
import org.wooriverygood.api.review.repository.ReviewLikeRepository;
@@ -17,8 +19,8 @@
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.*;
class ReviewDeleteServiceTest extends MockTest {
@@ -35,42 +37,52 @@ class ReviewDeleteServiceTest extends MockTest {
@Mock
private ReviewLikeRepository reviewLikeRepository;
- private Course course = Course.builder()
- .id(1L)
- .build();
+ @Mock
+ private MemberRepository memberRepository;
- private AuthInfo authInfo = AuthInfo.builder()
- .sub("22222-34534-123")
- .username("22222-34534-123")
- .build();
+ private Course course;
- @Mock
private Review review;
+ @BeforeEach
+ void setUp() {
+ course = Course.builder()
+ .id(1L)
+ .build();
+ review = Review.builder()
+ .member(member)
+ .course(course)
+ .build();
+ }
+
@Test
@DisplayName("권한이 있는 리뷰를 삭제한다.")
void deleteReview() {
when(reviewRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(review));
- when(review.getCourse())
- .thenReturn(course);
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
reviewDeleteService.deleteReview(1L, authInfo);
- verify(review).validateAuthor(authInfo.getUsername());
- verify(reviewLikeRepository).deleteAllByReview(review);
- verify(reviewRepository).delete(review);
- verify(courseRepository).decreaseReviewCount(course.getId());
+ assertAll(
+ () -> verify(reviewLikeRepository).deleteAllByReview(review),
+ () -> verify(reviewRepository).delete(review),
+ () -> verify(courseRepository).decreaseReviewCount(course.getId())
+ );
}
@Test
@DisplayName("권한이 없는 리뷰는 삭제가 불가능하다.")
void deleteReview_exception_noAuth() {
+ Review review = Review.builder()
+ .id(2L)
+ .member(new Member(5L, "noAuth"))
+ .build();
when(reviewRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(review));
- doThrow(new AuthorizationException())
- .when(review)
- .validateAuthor(anyString());
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
assertThatThrownBy(() -> reviewDeleteService.deleteReview(1L, authInfo))
.isInstanceOf(AuthorizationException.class);
diff --git a/src/test/java/org/wooriverygood/api/review/application/ReviewFindServiceTest.java b/src/test/java/org/wooriverygood/api/review/application/ReviewFindServiceTest.java
index 29677fb..b3fa693 100644
--- a/src/test/java/org/wooriverygood/api/review/application/ReviewFindServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/review/application/ReviewFindServiceTest.java
@@ -6,7 +6,8 @@
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.wooriverygood.api.course.domain.Course;
-import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.dto.ReviewsResponse;
import org.wooriverygood.api.review.repository.ReviewLikeRepository;
@@ -15,10 +16,10 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.when;
class ReviewFindServiceTest extends MockTest {
@@ -32,12 +33,10 @@ class ReviewFindServiceTest extends MockTest {
@Mock
private ReviewLikeRepository reviewLikeRepository;
- private List reviews = new ArrayList<>();
+ @Mock
+ private MemberRepository memberRepository;
- private AuthInfo authInfo = AuthInfo.builder()
- .sub("22222-34534-123")
- .username("22222-34534-123")
- .build();
+ private List reviews = new ArrayList<>();
private Course course = Course.builder()
.id(1L)
@@ -57,12 +56,12 @@ void setUp() {
Review review = Review.builder()
.id(i)
.course(course)
+ .member(member)
.reviewContent("review" + i)
.reviewTitle("review" + i)
.instructorName("jiaoshou")
.takenSemyr("22-23")
.grade("60")
- .authorEmail("author" + i)
.reviewLikes(new ArrayList<>())
.updated(false)
.build();
@@ -75,7 +74,9 @@ void setUp() {
void findAllReviewsByCourseId() {
when(reviewRepository.findAllByCourseId(any()))
.thenReturn(reviews);
- when(reviewLikeRepository.existsByReviewAndUsername(any(Review.class), anyString()))
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(reviewLikeRepository.existsByReviewAndMember(any(Review.class), any(Member.class)))
.thenReturn(true);
ReviewsResponse response = reviewFindService.findAllReviewsByCourseId(1L, authInfo);
@@ -87,8 +88,11 @@ void findAllReviewsByCourseId() {
@Test
@DisplayName("사용자 본인이 작성한 리뷰들을 불러온다.")
void findMyReviews() {
- when(reviewRepository.findByAuthorEmail(any(String.class)))
- .thenReturn(reviews);
+ for (Review review : reviews) {
+ member.addReview(review);
+ }
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
ReviewsResponse response = reviewFindService.findMyReviews(authInfo);
diff --git a/src/test/java/org/wooriverygood/api/review/application/ReviewLikeToggleServiceTest.java b/src/test/java/org/wooriverygood/api/review/application/ReviewLikeToggleServiceTest.java
index 430a4ad..c9f114e 100644
--- a/src/test/java/org/wooriverygood/api/review/application/ReviewLikeToggleServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/review/application/ReviewLikeToggleServiceTest.java
@@ -2,27 +2,27 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.domain.ReviewLike;
import org.wooriverygood.api.review.dto.*;
import org.wooriverygood.api.review.repository.ReviewLikeRepository;
import org.wooriverygood.api.review.repository.ReviewRepository;
-import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.util.MockTest;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.when;
-@ExtendWith(MockitoExtension.class)
-public class ReviewLikeToggleServiceTest {
+public class ReviewLikeToggleServiceTest extends MockTest {
@InjectMocks
private ReviewLikeToggleService reviewLikeToggleService;
@@ -33,10 +33,8 @@ public class ReviewLikeToggleServiceTest {
@Mock
private ReviewLikeRepository reviewLikeRepository;
- private final AuthInfo authInfo = AuthInfo.builder()
- .sub("22222-34534-123")
- .username("22222-34534-123")
- .build();
+ @Mock
+ private MemberRepository memberRepository;
private final Review review = Review.builder()
.id(1L)
@@ -45,7 +43,7 @@ public class ReviewLikeToggleServiceTest {
.instructorName("jiaoshou")
.takenSemyr("22-23")
.grade("100")
- .authorEmail(authInfo.getUsername())
+ .member(member)
.reviewLikes(new ArrayList<>())
.updated(false)
.createdAt(LocalDateTime.of(2022, 6, 13, 12, 00))
@@ -57,11 +55,15 @@ public class ReviewLikeToggleServiceTest {
void likeReview_up() {
when(reviewRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(review));
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
ReviewLikeResponse response = reviewLikeToggleService.toggleReviewLike(review.getId(), authInfo);
- assertThat(response.getLikeCount()).isEqualTo(review.getLikeCount() + 1);
- assertThat(response.isLiked()).isEqualTo(true);
+ assertAll(
+ () -> assertThat(response.getLikeCount()).isEqualTo(review.getLikeCount() + 1),
+ () -> assertThat(response.isLiked()).isEqualTo(true)
+ );
}
@Test
@@ -70,12 +72,14 @@ void likeReview_down() {
ReviewLike reviewLike = ReviewLike.builder()
.id(3L)
.review(review)
- .username(authInfo.getUsername())
+ .member(member)
.build();
when(reviewRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(review));
- when(reviewLikeRepository.findByReviewAndUsername(any(Review.class), anyString()))
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(reviewLikeRepository.findByReviewAndMember(any(Review.class), any(Member.class)))
.thenReturn(Optional.ofNullable(reviewLike));
ReviewLikeResponse response = reviewLikeToggleService.toggleReviewLike(review.getId(), authInfo);
diff --git a/src/test/java/org/wooriverygood/api/review/application/ReviewUpdateServiceTest.java b/src/test/java/org/wooriverygood/api/review/application/ReviewUpdateServiceTest.java
index 86a4cbe..5944d58 100644
--- a/src/test/java/org/wooriverygood/api/review/application/ReviewUpdateServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/review/application/ReviewUpdateServiceTest.java
@@ -1,11 +1,13 @@
package org.wooriverygood.api.review.application;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.wooriverygood.api.global.auth.AuthInfo;
import org.wooriverygood.api.global.error.exception.AuthorizationException;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.domain.Review;
import org.wooriverygood.api.review.dto.ReviewUpdateRequest;
import org.wooriverygood.api.review.repository.ReviewRepository;
@@ -13,8 +15,9 @@
import java.util.Optional;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.mockito.ArgumentMatchers.any;
+import static org.junit.jupiter.api.Assertions.assertAll;
import static org.mockito.Mockito.*;
class ReviewUpdateServiceTest extends MockTest {
@@ -25,14 +28,19 @@ class ReviewUpdateServiceTest extends MockTest {
@Mock
private ReviewRepository reviewRepository;
- private AuthInfo authInfo = AuthInfo.builder()
- .sub("22222-34534-123")
- .username("22222-34534-123")
- .build();
-
@Mock
+ private MemberRepository memberRepository;
+
private Review review;
+ @BeforeEach
+ void setUp() {
+ review = Review.builder()
+ .id(1L)
+ .member(member)
+ .build();
+ }
+
@Test
@DisplayName("권한이 있는 리뷰를 수정한다.")
void updateReview() {
@@ -43,19 +51,20 @@ void updateReview() {
.takenSemyr("18-19")
.grade("100")
.build();
-
- when(reviewRepository.findById(any(Long.class)))
+ when(reviewRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(review));
-
- reviewUpdateService.updateReview(1L, request, authInfo);
-
- verify(review).validateAuthor(authInfo.getUsername());
- verify(review).updateTitle(request.getReviewTitle());
- verify(review).updateInstructorName(request.getInstructorName());
- verify(review).updateTakenSemyr(request.getTakenSemyr());
- verify(review).updateContent(request.getReviewContent());
- verify(review).updateGrade(request.getGrade());
- verify(review).updateAuthor(authInfo.getUsername());
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+
+ reviewUpdateService.updateReview(review.getId(), request, authInfo);
+
+ assertAll(
+ () -> assertThat(review.getReviewTitle()).isEqualTo(request.getReviewTitle()),
+ () -> assertThat(review.getInstructorName()).isEqualTo(request.getInstructorName()),
+ () -> assertThat(review.getTakenSemyr()).isEqualTo(request.getTakenSemyr()),
+ () -> assertThat(review.getReviewContent()).isEqualTo(request.getReviewContent()),
+ () -> assertThat(review.getGrade()).isEqualTo(request.getGrade())
+ );
}
@Test
@@ -64,13 +73,12 @@ void updateReview_noAuth() {
ReviewUpdateRequest request = ReviewUpdateRequest.builder()
.build();
- when(reviewRepository.findById(any(Long.class)))
+ when(reviewRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(review));
- doThrow(new AuthorizationException())
- .when(review)
- .validateAuthor(anyString());
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.of(new Member(5L, "noAuth")));
- assertThatThrownBy(() -> reviewUpdateService.updateReview(1L, request, authInfo))
+ assertThatThrownBy(() -> reviewUpdateService.updateReview(review.getId(), request, authInfo))
.isInstanceOf(AuthorizationException.class);
}
diff --git a/src/test/java/org/wooriverygood/api/review/application/ReviewValidateAccessServiceTest.java b/src/test/java/org/wooriverygood/api/review/application/ReviewValidateAccessServiceTest.java
index 99375b1..e389a88 100644
--- a/src/test/java/org/wooriverygood/api/review/application/ReviewValidateAccessServiceTest.java
+++ b/src/test/java/org/wooriverygood/api/review/application/ReviewValidateAccessServiceTest.java
@@ -4,6 +4,9 @@
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
+import org.wooriverygood.api.course.domain.Course;
+import org.wooriverygood.api.member.domain.Member;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.review.exception.ReviewAccessDeniedException;
import org.wooriverygood.api.global.auth.AuthInfo;
import org.wooriverygood.api.review.domain.Review;
@@ -11,10 +14,12 @@
import org.wooriverygood.api.util.MockTest;
import java.time.LocalDateTime;
+import java.util.ArrayList;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.when;
class ReviewValidateAccessServiceTest extends MockTest {
@@ -25,10 +30,8 @@ class ReviewValidateAccessServiceTest extends MockTest {
@Mock
private ReviewRepository reviewRepository;
- private AuthInfo authInfo = AuthInfo.builder()
- .sub("22222-34534-123")
- .username("22222-34534-123")
- .build();
+ @Mock
+ private MemberRepository memberRepository;
@Test
@@ -38,7 +41,9 @@ void canAccessReviews_true() {
.createdAt(LocalDateTime.now().minusMonths(6))
.build();
- when(reviewRepository.findTopByAuthorEmailOrderByCreatedAtDesc(any(String.class)))
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(reviewRepository.findTopByMemberOrderByCreatedAtDesc(any(Member.class)))
.thenReturn(Optional.ofNullable(review));
reviewValidateAccessService.validateReviewAccess(authInfo);
@@ -47,7 +52,9 @@ void canAccessReviews_true() {
@Test
@DisplayName("리뷰를 작성하지 않았다면, 예외를 발생시킨다.")
void canAccessReviews_false_noReview() {
- when(reviewRepository.findTopByAuthorEmailOrderByCreatedAtDesc(any(String.class)))
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(reviewRepository.findTopByMemberOrderByCreatedAtDesc(any(Member.class)))
.thenReturn(Optional.empty());
assertThatThrownBy(() -> reviewValidateAccessService.validateReviewAccess(authInfo))
@@ -61,7 +68,9 @@ void canAccessReviews_false_sixMonths() {
.createdAt(LocalDateTime.of(2022, 6, 13, 12, 00))
.build();
- when(reviewRepository.findTopByAuthorEmailOrderByCreatedAtDesc(any(String.class)))
+ when(memberRepository.findById(anyLong()))
+ .thenReturn(Optional.ofNullable(member));
+ when(reviewRepository.findTopByMemberOrderByCreatedAtDesc(any(Member.class)))
.thenReturn(Optional.ofNullable(review));
assertThatThrownBy(() -> reviewValidateAccessService.validateReviewAccess(authInfo))
diff --git a/src/test/java/org/wooriverygood/api/util/ApiTest.java b/src/test/java/org/wooriverygood/api/util/ApiTest.java
index 519bf5e..1ea00cc 100644
--- a/src/test/java/org/wooriverygood/api/util/ApiTest.java
+++ b/src/test/java/org/wooriverygood/api/util/ApiTest.java
@@ -14,6 +14,7 @@
import org.wooriverygood.api.comment.api.CommentApi;
import org.wooriverygood.api.comment.application.*;
import org.wooriverygood.api.course.application.CourseFindService;
+import org.wooriverygood.api.member.repository.MemberRepository;
import org.wooriverygood.api.post.application.*;
import org.wooriverygood.api.report.api.ReportApi;
import org.wooriverygood.api.report.application.CommentReportService;
@@ -46,6 +47,9 @@ public class ApiTest {
protected MockMvcRequestSpecification restDocs;
+ @MockBean
+ protected MemberRepository memberRepository;
+
@MockBean
protected CourseCreateService courseCreateService;
diff --git a/src/test/java/org/wooriverygood/api/util/MockTest.java b/src/test/java/org/wooriverygood/api/util/MockTest.java
index e8ee391..a4aae7c 100644
--- a/src/test/java/org/wooriverygood/api/util/MockTest.java
+++ b/src/test/java/org/wooriverygood/api/util/MockTest.java
@@ -1,15 +1,26 @@
package org.wooriverygood.api.util;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.wooriverygood.api.global.auth.AuthInfo;
+import org.wooriverygood.api.member.domain.Member;
@ExtendWith(MockitoExtension.class)
public class MockTest {
protected AuthInfo authInfo = AuthInfo.builder()
+ .memberId(1L)
.sub("22222-34534-123")
.username("22222-34534-123")
.build();
+ protected Member member;
+
+
+ @BeforeEach
+ void mockData() {
+ member = new Member(1L, authInfo.getUsername());
+ }
+
}
diff --git a/src/test/java/org/wooriverygood/api/util/ResponseFixture.java b/src/test/java/org/wooriverygood/api/util/ResponseFixture.java
index 0925a3d..af0f2f8 100644
--- a/src/test/java/org/wooriverygood/api/util/ResponseFixture.java
+++ b/src/test/java/org/wooriverygood/api/util/ResponseFixture.java
@@ -30,6 +30,8 @@ public static PostResponse postResponse(long id, String category, AuthInfo authI
.liked(id % 6 == 0)
.updated(id % 9 == 0)
.reported(false)
+ .memberId(1L)
+ .isMine(false)
.build();
}
@@ -52,6 +54,8 @@ public static PostResponse reportedPostResponse(long id, String category, AuthIn
.liked(id % 6 == 0)
.updated(id % 9 == 0)
.reported(true)
+ .memberId(1L)
+ .isMine(false)
.build();
}