From 5d9aabd52a622db2f477ce44de7ff5d727934a1a Mon Sep 17 00:00:00 2001 From: challonsy Date: Wed, 12 Feb 2025 13:35:26 +0900 Subject: [PATCH 1/5] feat : isMyPost field added --- .../controller/postController/LostController.java | 8 ++++---- .../postController/ReviewController.java | 8 ++++---- .../converter/postConverter/LostConverter.java | 9 ++++++--- .../converter/postConverter/PostConverter.java | 3 ++- .../converter/postConverter/ReviewConverter.java | 8 +++++--- .../muit/backend/dto/postDTO/LostResponseDTO.java | 1 + .../muit/backend/dto/postDTO/PostResponseDTO.java | 1 + .../backend/dto/postDTO/ReviewResponseDTO.java | 1 + .../backend/service/postService/LostService.java | 4 ++-- .../service/postService/LostServiceImpl.java | 12 ++++++------ .../service/postService/PostServiceImpl.java | 13 ++++++++----- .../backend/service/postService/ReviewService.java | 4 ++-- .../service/postService/ReviewServiceImpl.java | 14 +++++++------- 13 files changed, 49 insertions(+), 37 deletions(-) diff --git a/src/main/java/muit/backend/controller/postController/LostController.java b/src/main/java/muit/backend/controller/postController/LostController.java index 34a69b9..e3f7d63 100644 --- a/src/main/java/muit/backend/controller/postController/LostController.java +++ b/src/main/java/muit/backend/controller/postController/LostController.java @@ -73,14 +73,14 @@ public ApiResponse getPostList(@RequestHeader case LOST -> PostType.LOST; case FOUND -> PostType.FOUND; }; - memberService.getMemberByToken(accessToken); + Member member = memberService.getMemberByToken(accessToken); Map search = new HashMap<>(); search.put("musicalName",musicalName.trim()); search.put("lostDate",lostDate!=null ? lostDate.toString().trim():""); search.put("location",location.trim()); search.put("lostItem",lostItem.trim()); - return ApiResponse.onSuccess(lostService.getLostPostList(postType, page, size, search)); + return ApiResponse.onSuccess(lostService.getLostPostList(postType, member, page, size, search)); } @GetMapping("/{postId}") @@ -88,8 +88,8 @@ public ApiResponse getPostList(@RequestHeader public ApiResponse getPost(@RequestHeader("Authorization") String accessToken, @PathVariable("postId") Long postId) { - memberService.getMemberByToken(accessToken); - return ApiResponse.onSuccess(lostService.getLostPost(postId)); + Member member = memberService.getMemberByToken(accessToken); + return ApiResponse.onSuccess(lostService.getLostPost(postId,member)); } diff --git a/src/main/java/muit/backend/controller/postController/ReviewController.java b/src/main/java/muit/backend/controller/postController/ReviewController.java index 0853a16..382af10 100644 --- a/src/main/java/muit/backend/controller/postController/ReviewController.java +++ b/src/main/java/muit/backend/controller/postController/ReviewController.java @@ -66,14 +66,14 @@ public ApiResponse getReviewList(@Reque @RequestParam(defaultValue = "", name="musicalName") String musicalName, @RequestParam(defaultValue = "",name="location") String location) { - memberService.getMemberByToken(accessToken); + Member member = memberService.getMemberByToken(accessToken); PostType postType = switch (reviewType){ case REVIEW -> PostType.REVIEW; case SIGHT -> PostType.SIGHT; }; - return ApiResponse.onSuccess(reviewService.getReviewList(postType, page, size, musicalName,location)); + return ApiResponse.onSuccess(reviewService.getReviewList(postType, member, page, size, musicalName,location)); } @GetMapping("/{postId}") @@ -83,9 +83,9 @@ public ApiResponse getReviewList(@Reque }) public ApiResponse getReview(@RequestHeader("Authorization") String accessToken, @PathVariable("postId") Long postId) { - memberService.getMemberByToken(accessToken); + Member member = memberService.getMemberByToken(accessToken); - return ApiResponse.onSuccess(reviewService.getReview(postId)); + return ApiResponse.onSuccess(reviewService.getReview(postId,member)); } @PatchMapping(value = "/{postId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) diff --git a/src/main/java/muit/backend/converter/postConverter/LostConverter.java b/src/main/java/muit/backend/converter/postConverter/LostConverter.java index c7659f8..7e97008 100644 --- a/src/main/java/muit/backend/converter/postConverter/LostConverter.java +++ b/src/main/java/muit/backend/converter/postConverter/LostConverter.java @@ -3,6 +3,7 @@ import muit.backend.domain.entity.member.Member; import muit.backend.domain.entity.member.Post; import muit.backend.domain.enums.PostType; +import muit.backend.domain.enums.Role; import muit.backend.dto.postDTO.LostRequestDTO; import muit.backend.dto.postDTO.LostResponseDTO; import muit.backend.s3.UuidFile; @@ -33,11 +34,13 @@ public static Post toPost(Member member, PostType postType, LostRequestDTO reque // Entity -> ResultDTO // 게시글 조회 - 단건, 생성, 수정 시 - public static LostResponseDTO.GeneralLostResponseDTO toGeneralLostResponseDTO(Post post) { + public static LostResponseDTO.GeneralLostResponseDTO toGeneralLostResponseDTO(Post post, Member member) { + boolean isMyPost = member.getRole().equals(Role.ADMIN) || member.getId().equals(post.getMember().getId()); String name = post.getIsAnonymous() ? "익명" :post.getMember().getName(); return LostResponseDTO.GeneralLostResponseDTO.builder() .id(post.getId()) .memberId(post.getMember().getId()) + .isMyPost(isMyPost) .nickname(name) .title(post.getTitle()) .content(post.getContent()) @@ -54,9 +57,9 @@ public static LostResponseDTO.GeneralLostResponseDTO toGeneralLostResponseDTO(Po // List -> ResultListDTO //게시판 조회 - 리스트 - public static LostResponseDTO.LostResultListDTO toLostResultListDTO(Page postPage) { + public static LostResponseDTO.LostResultListDTO toLostResultListDTO(Page postPage,Member member) { List lostResultListDTO = postPage.stream() - .map(LostConverter::toGeneralLostResponseDTO).collect(Collectors.toList()); + .map(post->LostConverter.toGeneralLostResponseDTO(post,member)).collect(Collectors.toList()); return LostResponseDTO.LostResultListDTO.builder() .posts(lostResultListDTO) diff --git a/src/main/java/muit/backend/converter/postConverter/PostConverter.java b/src/main/java/muit/backend/converter/postConverter/PostConverter.java index c455946..0a83c02 100644 --- a/src/main/java/muit/backend/converter/postConverter/PostConverter.java +++ b/src/main/java/muit/backend/converter/postConverter/PostConverter.java @@ -36,13 +36,14 @@ public static Post toPost(Member member, PostType postType, PostRequestDTO reque // Entity -> ResultDTO // 게시글 조회 - 단건 - public static PostResponseDTO.GeneralPostResponseDTO toGeneralPostResponseDTO(Post post,boolean isLiked) { + public static PostResponseDTO.GeneralPostResponseDTO toGeneralPostResponseDTO(Post post,boolean isLiked,boolean isMyPost) { String name = post.getIsAnonymous() ? "익명" :post.getMember().getName(); return PostResponseDTO.GeneralPostResponseDTO.builder() .id(post.getId()) .memberId(post.getMember().getId()) + .isMyPost(isMyPost) .nickname(name) .title(post.getTitle()) .content(post.getContent()) diff --git a/src/main/java/muit/backend/converter/postConverter/ReviewConverter.java b/src/main/java/muit/backend/converter/postConverter/ReviewConverter.java index 6b8b570..5a86beb 100644 --- a/src/main/java/muit/backend/converter/postConverter/ReviewConverter.java +++ b/src/main/java/muit/backend/converter/postConverter/ReviewConverter.java @@ -4,6 +4,7 @@ import muit.backend.domain.entity.member.Post; import muit.backend.domain.entity.musical.Musical; import muit.backend.domain.enums.PostType; +import muit.backend.domain.enums.Role; import muit.backend.dto.postDTO.ReviewRequestDTO; import muit.backend.dto.postDTO.ReviewResponseDTO; import muit.backend.s3.UuidFile; @@ -35,8 +36,9 @@ public static Post toReview(PostType postType, Member member, Musical musical, R } //to 단건 DTO - public static ReviewResponseDTO.GeneralReviewResponseDTO toReviewResponseDTO(Post review) { + public static ReviewResponseDTO.GeneralReviewResponseDTO toReviewResponseDTO(Post review, Member member) { + boolean isMyPost = member.getRole().equals(Role.ADMIN) || member.getId().equals(review.getMember().getId()); String name = review.getIsAnonymous() ? "익명" :review.getMember().getName(); return ReviewResponseDTO.GeneralReviewResponseDTO.builder() @@ -58,9 +60,9 @@ public static ReviewResponseDTO.GeneralReviewResponseDTO toReviewResponseDTO(Pos } //Page to ListDTO - public static ReviewResponseDTO.ReviewListResponseDTO toReviewListDTO(Page reviewPage) { + public static ReviewResponseDTO.ReviewListResponseDTO toReviewListDTO(Page reviewPage,Member member) { List reviewListDTO = reviewPage.stream(). - map(ReviewConverter::toReviewResponseDTO).collect(Collectors.toList()); + map(post->ReviewConverter.toReviewResponseDTO(post,member)).collect(Collectors.toList()); return ReviewResponseDTO.ReviewListResponseDTO.builder() .posts(reviewListDTO) diff --git a/src/main/java/muit/backend/dto/postDTO/LostResponseDTO.java b/src/main/java/muit/backend/dto/postDTO/LostResponseDTO.java index 69a685a..3a1b629 100644 --- a/src/main/java/muit/backend/dto/postDTO/LostResponseDTO.java +++ b/src/main/java/muit/backend/dto/postDTO/LostResponseDTO.java @@ -19,6 +19,7 @@ public class LostResponseDTO { public static class GeneralLostResponseDTO { private Long id; private Long memberId; + private Boolean isMyPost; private String nickname; private String title; private String musicalName; diff --git a/src/main/java/muit/backend/dto/postDTO/PostResponseDTO.java b/src/main/java/muit/backend/dto/postDTO/PostResponseDTO.java index fe8ce8d..33723fa 100644 --- a/src/main/java/muit/backend/dto/postDTO/PostResponseDTO.java +++ b/src/main/java/muit/backend/dto/postDTO/PostResponseDTO.java @@ -18,6 +18,7 @@ public class PostResponseDTO { public static class GeneralPostResponseDTO { private Long id; private Long memberId; + private Boolean isMyPost; private String nickname; private String title; private String content; diff --git a/src/main/java/muit/backend/dto/postDTO/ReviewResponseDTO.java b/src/main/java/muit/backend/dto/postDTO/ReviewResponseDTO.java index 3ea42dc..55fadd3 100644 --- a/src/main/java/muit/backend/dto/postDTO/ReviewResponseDTO.java +++ b/src/main/java/muit/backend/dto/postDTO/ReviewResponseDTO.java @@ -17,6 +17,7 @@ public class ReviewResponseDTO public static class GeneralReviewResponseDTO{ private Long id; private Long memberId; + private Boolean isMyPost; private String nickname; private String title; private String content; diff --git a/src/main/java/muit/backend/service/postService/LostService.java b/src/main/java/muit/backend/service/postService/LostService.java index 177aa85..4ddcf43 100644 --- a/src/main/java/muit/backend/service/postService/LostService.java +++ b/src/main/java/muit/backend/service/postService/LostService.java @@ -14,10 +14,10 @@ public interface LostService { //특정 게시글 조회 - public LostResponseDTO.GeneralLostResponseDTO getLostPost(Long PostId); + public LostResponseDTO.GeneralLostResponseDTO getLostPost(Long PostId,Member member); //게시판 조회 - public LostResponseDTO.LostResultListDTO getLostPostList(PostType postType, Integer page, Integer size, Map search); + public LostResponseDTO.LostResultListDTO getLostPostList(PostType postType, Member member, Integer page, Integer size, Map search); //게시글 생성 public LostResponseDTO.GeneralLostResponseDTO createLostPost(PostType postType, LostRequestDTO lostRequestDTO, List img, Member member); diff --git a/src/main/java/muit/backend/service/postService/LostServiceImpl.java b/src/main/java/muit/backend/service/postService/LostServiceImpl.java index 8200eb3..6709e5a 100644 --- a/src/main/java/muit/backend/service/postService/LostServiceImpl.java +++ b/src/main/java/muit/backend/service/postService/LostServiceImpl.java @@ -42,7 +42,7 @@ public class LostServiceImpl implements LostService { //게시판 조회 @Override - public LostResponseDTO.LostResultListDTO getLostPostList(PostType postType, Integer page,Integer size, Map search) { + public LostResponseDTO.LostResultListDTO getLostPostList(PostType postType, Member member , Integer page,Integer size, Map search) { Page postPage; if(!search.get("musicalName").isEmpty()) {//뮤지컬 이름 포함 검색 if(!search.get("lostDate").isEmpty()){//날짜 포함 검색 @@ -83,16 +83,16 @@ public LostResponseDTO.LostResultListDTO getLostPostList(PostType postType, Inte } - return LostConverter.toLostResultListDTO(postPage); + return LostConverter.toLostResultListDTO(postPage,member); } //특정 게시판 특정 게시글 단건 조회 @Override - public LostResponseDTO.GeneralLostResponseDTO getLostPost(Long id) { + public LostResponseDTO.GeneralLostResponseDTO getLostPost(Long id,Member member) { Post post = postRepository.findById(id) .orElseThrow(() -> new GeneralException(ErrorStatus.POST_NOT_FOUND)); - return LostConverter.toGeneralLostResponseDTO(post); + return LostConverter.toGeneralLostResponseDTO(post,member); } //게시글 작성 @@ -116,7 +116,7 @@ public LostResponseDTO.GeneralLostResponseDTO createLostPost(PostType postType, // 엔티티 저장 postRepository.save(post); - return LostConverter.toGeneralLostResponseDTO(post); + return LostConverter.toGeneralLostResponseDTO(post,member); } @Override @@ -152,6 +152,6 @@ public LostResponseDTO.GeneralLostResponseDTO editLostPost(Long postId, LostRequ //나머지 필드 수정 Post changedPost = post.changeLost(lostRequestDTO); - return LostConverter.toGeneralLostResponseDTO(changedPost); + return LostConverter.toGeneralLostResponseDTO(changedPost,member); } } diff --git a/src/main/java/muit/backend/service/postService/PostServiceImpl.java b/src/main/java/muit/backend/service/postService/PostServiceImpl.java index 7c41a6b..7cb64b4 100644 --- a/src/main/java/muit/backend/service/postService/PostServiceImpl.java +++ b/src/main/java/muit/backend/service/postService/PostServiceImpl.java @@ -55,7 +55,7 @@ public PostResponseDTO.GeneralPostResponseDTO createPost(PostType postType, Post // 엔티티 저장 postRepository.save(post); - return PostConverter.toGeneralPostResponseDTO(post,false); + return PostConverter.toGeneralPostResponseDTO(post,false, true); } //게시판 조회 @@ -67,7 +67,8 @@ public PostResponseDTO.PostResultListDTO getPostList(PostType postType, Integer .map((post)->{ PostLikes postLike= postLikesRepository.findByMemberAndPost(member,post); boolean isLiked = postLike!=null; - return PostConverter.toGeneralPostResponseDTO(post,isLiked); + boolean isMyPost = member.getId().equals(post.getMember().getId()); + return PostConverter.toGeneralPostResponseDTO(post,isLiked,isMyPost); }).collect(Collectors.toList()); return PostResponseDTO.PostResultListDTO.builder() @@ -88,7 +89,8 @@ public PostResponseDTO.PostResultListDTO getHotPostList(PostType postType, Integ .map((post)->{ PostLikes postLike= postLikesRepository.findByMemberAndPost(member,post); boolean isLiked = postLike!=null; - return PostConverter.toGeneralPostResponseDTO(post,isLiked); + boolean isMyPost = member.getId().equals(post.getMember().getId()); + return PostConverter.toGeneralPostResponseDTO(post,isLiked, isMyPost); }).collect(Collectors.toList()); return PostResponseDTO.PostResultListDTO.builder() @@ -110,8 +112,9 @@ public PostResponseDTO.GeneralPostResponseDTO getPost(Long id,Member member) { boolean isLiked; PostLikes postLike = postLikesRepository.findByMemberAndPost(member,post); isLiked= postLike != null; + boolean isMyPost = member.getId().equals(post.getMember().getId()); - return PostConverter.toGeneralPostResponseDTO(post,isLiked); + return PostConverter.toGeneralPostResponseDTO(post, isLiked, isMyPost); } //게시글 삭제 @@ -170,7 +173,7 @@ public PostResponseDTO.GeneralPostResponseDTO editPost(Long postId, PostRequestD PostLikes postLike = postLikesRepository.findByMemberAndPost(member,post); isLiked= postLike != null; - return PostConverter.toGeneralPostResponseDTO(changedPost,isLiked); + return PostConverter.toGeneralPostResponseDTO(changedPost,isLiked,true); } @Override diff --git a/src/main/java/muit/backend/service/postService/ReviewService.java b/src/main/java/muit/backend/service/postService/ReviewService.java index d41e432..766f244 100644 --- a/src/main/java/muit/backend/service/postService/ReviewService.java +++ b/src/main/java/muit/backend/service/postService/ReviewService.java @@ -14,9 +14,9 @@ public interface ReviewService { ReviewResponseDTO.GeneralReviewResponseDTO createReview(PostType postType, ReviewRequestDTO reviewRequestDTO, List img, Member member); - ReviewResponseDTO.ReviewListResponseDTO getReviewList(PostType postType,Integer page, Integer size, String musicalName, String location); + ReviewResponseDTO.ReviewListResponseDTO getReviewList(PostType postType, Member member, Integer page, Integer size, String musicalName, String location); - ReviewResponseDTO.GeneralReviewResponseDTO getReview(Long postId); + ReviewResponseDTO.GeneralReviewResponseDTO getReview(Long postId,Member member); ReviewResponseDTO.GeneralReviewResponseDTO editReview(Long postId, ReviewRequestDTO reviewRequestDTO, List img, Member member); } diff --git a/src/main/java/muit/backend/service/postService/ReviewServiceImpl.java b/src/main/java/muit/backend/service/postService/ReviewServiceImpl.java index 18aeedc..c027c57 100644 --- a/src/main/java/muit/backend/service/postService/ReviewServiceImpl.java +++ b/src/main/java/muit/backend/service/postService/ReviewServiceImpl.java @@ -58,12 +58,12 @@ public ReviewResponseDTO.GeneralReviewResponseDTO createReview(PostType postType postRepository.save(review); - return ReviewConverter.toReviewResponseDTO(review); + return ReviewConverter.toReviewResponseDTO(review,member); } //리뷰 목록 조회 @Override - public ReviewResponseDTO.ReviewListResponseDTO getReviewList(PostType postType, Integer page, Integer size, String musicalName, String location){ + public ReviewResponseDTO.ReviewListResponseDTO getReviewList(PostType postType, Member member, Integer page, Integer size, String musicalName, String location){ Page reviewPage; if(!musicalName.isEmpty()){ @@ -72,15 +72,15 @@ public ReviewResponseDTO.ReviewListResponseDTO getReviewList(PostType postType, reviewPage = postRepository.findAllByPostTypeAndLocationContaining(postType, PageRequest.of(page, size),location); } - return ReviewConverter.toReviewListDTO(reviewPage); + return ReviewConverter.toReviewListDTO(reviewPage, member); } //리뷰 단건 조회 @Override - public ReviewResponseDTO.GeneralReviewResponseDTO getReview(Long postId) { + public ReviewResponseDTO.GeneralReviewResponseDTO getReview(Long postId,Member member) { Post review = postRepository.findById(postId).orElseThrow(()->new GeneralException(ErrorStatus.POST_NOT_FOUND)); - return ReviewConverter.toReviewResponseDTO(review); + return ReviewConverter.toReviewResponseDTO(review,member); } //리뷰 수정 @@ -118,7 +118,7 @@ public ReviewResponseDTO.GeneralReviewResponseDTO editReview(Long postId, Review //수정된 이미지 삽입 List imgArr = new ArrayList<>(); if(imgFile!=null&&!imgFile.isEmpty()){ - //추후 채은에게 SIGHT 추가 해달라고 하기 + imgArr = imgFile.stream().map(img->uuidFileService.createFile(img, filePath)).collect(Collectors.toList()); } review.changeImg(imgArr); @@ -127,6 +127,6 @@ public ReviewResponseDTO.GeneralReviewResponseDTO editReview(Long postId, Review //나머지 필드 수정 Post changedPost = review.changeReview(requestDTO); - return ReviewConverter.toReviewResponseDTO(changedPost); + return ReviewConverter.toReviewResponseDTO(changedPost, member); } } From eaa12b29dc8b39fcea742943fc65d2a3a029d95b Mon Sep 17 00:00:00 2001 From: challonsy Date: Wed, 12 Feb 2025 13:52:48 +0900 Subject: [PATCH 2/5] feat : comment admin deletion feature --- .../postConverter/PostConverter.java | 4 ++- .../backend/domain/entity/member/Comment.java | 11 ++++-- .../backend/service/CommentServiceImpl.java | 35 +++++++++++-------- .../service/postService/PostServiceImpl.java | 14 ++++---- 4 files changed, 39 insertions(+), 25 deletions(-) diff --git a/src/main/java/muit/backend/converter/postConverter/PostConverter.java b/src/main/java/muit/backend/converter/postConverter/PostConverter.java index 0a83c02..14a3e37 100644 --- a/src/main/java/muit/backend/converter/postConverter/PostConverter.java +++ b/src/main/java/muit/backend/converter/postConverter/PostConverter.java @@ -3,6 +3,7 @@ import muit.backend.domain.entity.member.Member; import muit.backend.domain.entity.member.Post; import muit.backend.domain.enums.PostType; +import muit.backend.domain.enums.Role; import muit.backend.dto.postDTO.PostRequestDTO; import muit.backend.dto.postDTO.PostResponseDTO; import muit.backend.s3.UuidFile; @@ -36,8 +37,9 @@ public static Post toPost(Member member, PostType postType, PostRequestDTO reque // Entity -> ResultDTO // 게시글 조회 - 단건 - public static PostResponseDTO.GeneralPostResponseDTO toGeneralPostResponseDTO(Post post,boolean isLiked,boolean isMyPost) { + public static PostResponseDTO.GeneralPostResponseDTO toGeneralPostResponseDTO(Post post,boolean isLiked,Member member) { + boolean isMyPost = member.getRole().equals(Role.ADMIN) || member.getId().equals(post.getMember().getId()); String name = post.getIsAnonymous() ? "익명" :post.getMember().getName(); return PostResponseDTO.GeneralPostResponseDTO.builder() diff --git a/src/main/java/muit/backend/domain/entity/member/Comment.java b/src/main/java/muit/backend/domain/entity/member/Comment.java index 360cd4b..12a6e05 100644 --- a/src/main/java/muit/backend/domain/entity/member/Comment.java +++ b/src/main/java/muit/backend/domain/entity/member/Comment.java @@ -6,6 +6,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import muit.backend.domain.common.BaseEntity; +import muit.backend.domain.enums.Role; import org.hibernate.annotations.DynamicUpdate; import java.util.ArrayList; @@ -44,8 +45,14 @@ public class Comment extends BaseEntity { - public void deleteContent(String newContent) { - this.content = newContent; + public void deleteContent(Role role) { + if(role.equals(Role.USER)){ + this.content = "삭제된 댓글입니다."; + this.member = null; + }else{ + this.content = "관리자에 의해 삭제된 댓글입니다."; + this.member = null; + } } public void changeReportCount(Boolean isAdd){ diff --git a/src/main/java/muit/backend/service/CommentServiceImpl.java b/src/main/java/muit/backend/service/CommentServiceImpl.java index 6a137c8..c7aae0b 100644 --- a/src/main/java/muit/backend/service/CommentServiceImpl.java +++ b/src/main/java/muit/backend/service/CommentServiceImpl.java @@ -8,6 +8,7 @@ import muit.backend.converter.CommentConverter; import muit.backend.domain.entity.member.*; import muit.backend.domain.enums.ReportObjectType; +import muit.backend.domain.enums.Role; import muit.backend.dto.commentDTO.CommentReplyRequestDTO; import muit.backend.dto.commentDTO.CommentReplyResponseDTO; import muit.backend.dto.reportDTO.ReportRequestDTO; @@ -75,27 +76,31 @@ public CommentReplyResponseDTO.DeleteResultDTO deleteComment(String commentType, if(commentType.equals("COMMENT")){ Comment comment = commentRepository.findById(commentId).orElseThrow(()->new GeneralException(ErrorStatus.COMMENT_NOT_FOUND)); - //작성자와 동일인인지 검사 - if(comment.getMember()!=member){ - throw(new GeneralException(ErrorStatus._FORBIDDEN)); - } - if(!comment.getReplyList().isEmpty()){ - comment.deleteContent("삭제된 댓글입니다."); + //작성자와 동일인인지 검사/또는 관리자인지 + if(comment.getMember()==member||comment.getMember().getRole()== Role.ADMIN){ + if(!comment.getReplyList().isEmpty()){//대댓글 있으면 내용을 삭제된 댓글입니다 로 + comment.deleteContent(member.getRole()); + }else{//대댓글 없으면 그냥 삭제 + commentRepository.delete(comment); + } + comment.getPost().changeCommentCount(false); }else{ - commentRepository.delete(comment); - } - comment.getPost().changeCommentCount(false); - }else if(commentType.equals("REPLY")){ - Reply reply = replyRepository.findById(commentId).orElseThrow(()->new GeneralException(ErrorStatus.COMMENT_NOT_FOUND)); //작성자와 동일인인지 검사 - if(reply.getMember()!=member){ throw(new GeneralException(ErrorStatus._FORBIDDEN)); } + } - replyRepository.deleteById(commentId); - reply.getComment().getPost().changeCommentCount(false); + else if(commentType.equals("REPLY")){//대댓글의 경우 + Reply reply = replyRepository.findById(commentId).orElseThrow(()->new GeneralException(ErrorStatus.COMMENT_NOT_FOUND)); + //작성자와 동일인인지 검사 + if(reply.getMember()==member||reply.getMember().getRole()== Role.ADMIN){ + replyRepository.deleteById(commentId); + reply.getComment().getPost().changeCommentCount(false); + }else{ + throw new RuntimeException("comment type not supported"); + } }else{ - throw new RuntimeException("comment type not supported"); + throw(new GeneralException(ErrorStatus._FORBIDDEN)); } return CommentReplyResponseDTO.DeleteResultDTO.builder() diff --git a/src/main/java/muit/backend/service/postService/PostServiceImpl.java b/src/main/java/muit/backend/service/postService/PostServiceImpl.java index 7cb64b4..ab2b892 100644 --- a/src/main/java/muit/backend/service/postService/PostServiceImpl.java +++ b/src/main/java/muit/backend/service/postService/PostServiceImpl.java @@ -55,7 +55,7 @@ public PostResponseDTO.GeneralPostResponseDTO createPost(PostType postType, Post // 엔티티 저장 postRepository.save(post); - return PostConverter.toGeneralPostResponseDTO(post,false, true); + return PostConverter.toGeneralPostResponseDTO(post,false, member); } //게시판 조회 @@ -67,8 +67,8 @@ public PostResponseDTO.PostResultListDTO getPostList(PostType postType, Integer .map((post)->{ PostLikes postLike= postLikesRepository.findByMemberAndPost(member,post); boolean isLiked = postLike!=null; - boolean isMyPost = member.getId().equals(post.getMember().getId()); - return PostConverter.toGeneralPostResponseDTO(post,isLiked,isMyPost); + + return PostConverter.toGeneralPostResponseDTO(post,isLiked,member); }).collect(Collectors.toList()); return PostResponseDTO.PostResultListDTO.builder() @@ -89,8 +89,8 @@ public PostResponseDTO.PostResultListDTO getHotPostList(PostType postType, Integ .map((post)->{ PostLikes postLike= postLikesRepository.findByMemberAndPost(member,post); boolean isLiked = postLike!=null; - boolean isMyPost = member.getId().equals(post.getMember().getId()); - return PostConverter.toGeneralPostResponseDTO(post,isLiked, isMyPost); + + return PostConverter.toGeneralPostResponseDTO(post,isLiked, member); }).collect(Collectors.toList()); return PostResponseDTO.PostResultListDTO.builder() @@ -114,7 +114,7 @@ public PostResponseDTO.GeneralPostResponseDTO getPost(Long id,Member member) { isLiked= postLike != null; boolean isMyPost = member.getId().equals(post.getMember().getId()); - return PostConverter.toGeneralPostResponseDTO(post, isLiked, isMyPost); + return PostConverter.toGeneralPostResponseDTO(post, isLiked, member); } //게시글 삭제 @@ -173,7 +173,7 @@ public PostResponseDTO.GeneralPostResponseDTO editPost(Long postId, PostRequestD PostLikes postLike = postLikesRepository.findByMemberAndPost(member,post); isLiked= postLike != null; - return PostConverter.toGeneralPostResponseDTO(changedPost,isLiked,true); + return PostConverter.toGeneralPostResponseDTO(changedPost,isLiked,member); } @Override From 7ef9be27886f50da77a631f34108db370b8b021a Mon Sep 17 00:00:00 2001 From: challonsy Date: Wed, 12 Feb 2025 13:58:32 +0900 Subject: [PATCH 3/5] feat : comment deletion nickname dealing --- src/main/java/muit/backend/converter/CommentConverter.java | 1 + src/main/java/muit/backend/domain/entity/member/Comment.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/muit/backend/converter/CommentConverter.java b/src/main/java/muit/backend/converter/CommentConverter.java index 3b87924..207f6b9 100644 --- a/src/main/java/muit/backend/converter/CommentConverter.java +++ b/src/main/java/muit/backend/converter/CommentConverter.java @@ -134,6 +134,7 @@ public static CommentReplyResponseDTO.CommentListResponseDTO toCommentListRespon public static CommentReplyResponseDTO.ReplyResponseDTO toReplyResponseDTO(Reply reply) { String nickname = switch (reply.getAnonymousIndex()) { + case -2 -> "삭제된 댓글"; case -1 -> reply.getMember().getName(); case 0 -> "글쓴이"; default -> "익명" + reply.getAnonymousIndex(); diff --git a/src/main/java/muit/backend/domain/entity/member/Comment.java b/src/main/java/muit/backend/domain/entity/member/Comment.java index 12a6e05..58027c1 100644 --- a/src/main/java/muit/backend/domain/entity/member/Comment.java +++ b/src/main/java/muit/backend/domain/entity/member/Comment.java @@ -48,10 +48,10 @@ public class Comment extends BaseEntity { public void deleteContent(Role role) { if(role.equals(Role.USER)){ this.content = "삭제된 댓글입니다."; - this.member = null; + this.anonymousIndex =-2; }else{ this.content = "관리자에 의해 삭제된 댓글입니다."; - this.member = null; + this.anonymousIndex = -2; } } From 49ae9d00d963ee166208c72a346c6cfed8bcf038 Mon Sep 17 00:00:00 2001 From: challonsy Date: Wed, 12 Feb 2025 14:17:32 +0900 Subject: [PATCH 4/5] feat : post admin deletion feature --- .../controller/postController/CommonPostController.java | 4 ++-- .../java/muit/backend/converter/CommentConverter.java | 2 +- .../backend/service/postService/PostServiceImpl.java | 9 +++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/muit/backend/controller/postController/CommonPostController.java b/src/main/java/muit/backend/controller/postController/CommonPostController.java index 5ec68a2..dba1da4 100644 --- a/src/main/java/muit/backend/controller/postController/CommonPostController.java +++ b/src/main/java/muit/backend/controller/postController/CommonPostController.java @@ -99,9 +99,9 @@ public ApiResponse getReportList( @Reque Page reports; if(type==null){ reports= reportRepository.findAll(PageRequest.of(page, size)); - }else if(type==Type.POST){ + }else if(type==Type.POST){//게시물 신고만 조회 reports=reportRepository.findAllByReportObjectType(ReportObjectType.POST,PageRequest.of(page,size)); - }else if(type==Type.COMMENT){ + }else if(type==Type.COMMENT){//댓글 신고만 조회 ReportObjectType[] types = {ReportObjectType.COMMENT,ReportObjectType.REPLY}; reports=reportRepository.findAllByReportObjectTypeIn(types,PageRequest.of(page,size)); }else{ diff --git a/src/main/java/muit/backend/converter/CommentConverter.java b/src/main/java/muit/backend/converter/CommentConverter.java index 207f6b9..90577d2 100644 --- a/src/main/java/muit/backend/converter/CommentConverter.java +++ b/src/main/java/muit/backend/converter/CommentConverter.java @@ -100,6 +100,7 @@ public static CommentReplyResponseDTO.CommentResponseDTO toCommentResponseDTO(Co .map(CommentConverter::toReplyResponseDTO).collect(Collectors.toList()); String nickname = switch (comment.getAnonymousIndex()) { + case -2 -> "삭제된 댓글"; case -1 -> comment.getMember().getName(); case 0 -> "글쓴이"; default -> "익명" + comment.getAnonymousIndex(); @@ -134,7 +135,6 @@ public static CommentReplyResponseDTO.CommentListResponseDTO toCommentListRespon public static CommentReplyResponseDTO.ReplyResponseDTO toReplyResponseDTO(Reply reply) { String nickname = switch (reply.getAnonymousIndex()) { - case -2 -> "삭제된 댓글"; case -1 -> reply.getMember().getName(); case 0 -> "글쓴이"; default -> "익명" + reply.getAnonymousIndex(); diff --git a/src/main/java/muit/backend/service/postService/PostServiceImpl.java b/src/main/java/muit/backend/service/postService/PostServiceImpl.java index ab2b892..c3c5ea3 100644 --- a/src/main/java/muit/backend/service/postService/PostServiceImpl.java +++ b/src/main/java/muit/backend/service/postService/PostServiceImpl.java @@ -10,6 +10,7 @@ import muit.backend.domain.entity.member.Report; import muit.backend.domain.enums.PostType; import muit.backend.domain.enums.ReportObjectType; +import muit.backend.domain.enums.Role; import muit.backend.dto.postDTO.PostRequestDTO; import muit.backend.dto.postDTO.PostResponseDTO; import muit.backend.dto.reportDTO.ReportRequestDTO; @@ -127,13 +128,13 @@ public PostResponseDTO.DeleteResultDTO deletePost(Long id, Member member) { orElseThrow(() -> new GeneralException(ErrorStatus.POST_NOT_FOUND)); //작성자와 동일인인지 검사 - if(post.getMember()!=member){ + if(post.getMember()==member||member.getRole()== Role.ADMIN){ + // 엔티티 삭제 + postRepository.delete(post); + }else{ throw(new GeneralException(ErrorStatus._FORBIDDEN)); } - // 엔티티 삭제 - postRepository.delete(post); - return PostResponseDTO.DeleteResultDTO.builder() .message("삭제 완료") .build(); From 9030470fe0d14e6e655f53325769aacee9a02c15 Mon Sep 17 00:00:00 2001 From: challonsy Date: Wed, 12 Feb 2025 14:48:27 +0900 Subject: [PATCH 5/5] feat : isMyComment field added to commentDTO and getOneComment API created --- .../backend/controller/CommentController.java | 46 ++++++++++++++++++- .../backend/converter/CommentConverter.java | 15 ++++-- .../commentDTO/CommentReplyResponseDTO.java | 2 + .../muit/backend/service/CommentService.java | 2 +- .../backend/service/CommentServiceImpl.java | 8 ++-- 5 files changed, 61 insertions(+), 12 deletions(-) diff --git a/src/main/java/muit/backend/controller/CommentController.java b/src/main/java/muit/backend/controller/CommentController.java index 54ee5dc..2a3463d 100644 --- a/src/main/java/muit/backend/controller/CommentController.java +++ b/src/main/java/muit/backend/controller/CommentController.java @@ -6,14 +6,22 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import muit.backend.apiPayLoad.ApiResponse; +import muit.backend.apiPayLoad.code.status.ErrorStatus; +import muit.backend.apiPayLoad.exception.GeneralException; +import muit.backend.converter.CommentConverter; +import muit.backend.domain.entity.member.Comment; import muit.backend.domain.entity.member.Member; +import muit.backend.domain.entity.member.Reply; import muit.backend.domain.enums.PostType; +import muit.backend.domain.enums.Role; import muit.backend.dto.commentDTO.CommentReplyRequestDTO; import muit.backend.dto.commentDTO.CommentReplyResponseDTO; import muit.backend.dto.postDTO.LostRequestDTO; import muit.backend.dto.postDTO.LostResponseDTO; import muit.backend.dto.reportDTO.ReportRequestDTO; import muit.backend.dto.reportDTO.ReportResponseDTO; +import muit.backend.repository.CommentRepository; +import muit.backend.repository.ReplyRepository; import muit.backend.service.CommentService; import muit.backend.service.MemberService; import org.springframework.web.bind.annotation.*; @@ -26,6 +34,8 @@ public class CommentController { private final CommentService commentService; private final MemberService memberService; + private final CommentRepository commentRepository; + private final ReplyRepository replyRepository; @GetMapping("/{postId}") @Operation(summary = "댓글 조회 API", description = "특정 게시물의 댓글을 모두 조회하는 API") @@ -37,9 +47,9 @@ public ApiResponse getCommentLis @PathVariable("postId") Long postId, @RequestParam(defaultValue = "0", name = "page") Integer page, @RequestParam(defaultValue = "20", name = "size") Integer size) { - memberService.getMemberByToken(accessToken); + Member member = memberService.getMemberByToken(accessToken); - return ApiResponse.onSuccess(commentService.getCommentList(postId, page, size)); + return ApiResponse.onSuccess(commentService.getCommentList(postId, member, page, size)); } @PostMapping("/{postId}") @@ -80,4 +90,36 @@ public ApiResponse reportComment(@RequestHead Member member = memberService.getMemberByToken(accessToken); return ApiResponse.onSuccess(commentService.reportComment(commentType,commentId,member,requestDTO)); } + + @GetMapping("/admin/comment") + @Operation(summary = "댓글 단건 조회 API", description = "신고 내용 중 댓글 id로 댓글 정보 불러오는 API") + @Parameters({ + @Parameter(name = "commentId", description = "댓글 아이디") + }) + public ApiResponse getComment(@RequestHeader("Authorization") String accessToken, + @RequestParam("commentId") Long commentId) { + Member member = memberService.getMemberByToken(accessToken); + if(member.getRole()!= Role.ADMIN){ + throw new GeneralException(ErrorStatus.MEMBER_NOT_ADMIN); + } + Comment comment = commentRepository.findById(commentId).orElseThrow(()->new GeneralException(ErrorStatus.COMMENT_NOT_FOUND)); + + return ApiResponse.onSuccess(CommentConverter.toCommentResponseDTO(comment,member)); + } + + @GetMapping("/admin/reply") + @Operation(summary = "대댓글 단건 조회 API", description = "신고 내용 중 대댓글 id로 댓글 정보 불러오는 API") + @Parameters({ + @Parameter(name = "replyId", description = "대댓글 아이디") + }) + public ApiResponse getReply(@RequestHeader("Authorization") String accessToken, + @RequestParam("commentId") Long commentId) { + Member member = memberService.getMemberByToken(accessToken); + if(member.getRole()!= Role.ADMIN){ + throw new GeneralException(ErrorStatus.MEMBER_NOT_ADMIN); + } + Reply reply = replyRepository.findById(commentId).orElseThrow(()->new GeneralException(ErrorStatus.COMMENT_NOT_FOUND)); + + return ApiResponse.onSuccess(CommentConverter.toReplyResponseDTO(reply,member)); + } } diff --git a/src/main/java/muit/backend/converter/CommentConverter.java b/src/main/java/muit/backend/converter/CommentConverter.java index 90577d2..46876cf 100644 --- a/src/main/java/muit/backend/converter/CommentConverter.java +++ b/src/main/java/muit/backend/converter/CommentConverter.java @@ -94,10 +94,10 @@ public static Reply toReply(CommentReplyRequestDTO.ReplyRequestDTO requestDTO, C //Comment -> DTO //생성 시 답, 조회 시 단건 답 - public static CommentReplyResponseDTO.CommentResponseDTO toCommentResponseDTO(Comment comment) { + public static CommentReplyResponseDTO.CommentResponseDTO toCommentResponseDTO(Comment comment, Member member) { List replies = comment.getReplyList().stream() - .map(CommentConverter::toReplyResponseDTO).collect(Collectors.toList()); + .map(reply->CommentConverter.toReplyResponseDTO(reply,member)).collect(Collectors.toList()); String nickname = switch (comment.getAnonymousIndex()) { case -2 -> "삭제된 댓글"; @@ -106,10 +106,13 @@ public static CommentReplyResponseDTO.CommentResponseDTO toCommentResponseDTO(Co default -> "익명" + comment.getAnonymousIndex(); }; + boolean isMyComment = comment.getMember()==member; + return CommentReplyResponseDTO.CommentResponseDTO.builder() .commentId(comment.getId()) .content(comment.getContent()) .memberId(comment.getMember().getId()) + .isMyComment(isMyComment) .nickname(nickname) .replies(replies) .createdAt(comment.getCreatedAt()) @@ -117,9 +120,9 @@ public static CommentReplyResponseDTO.CommentResponseDTO toCommentResponseDTO(Co } //조회 시 리스트 형식 답 - public static CommentReplyResponseDTO.CommentListResponseDTO toCommentListResponseDTO(Page commentPage) { + public static CommentReplyResponseDTO.CommentListResponseDTO toCommentListResponseDTO(Page commentPage, Member member) { List commentResultListDTO = commentPage.stream() - .map(CommentConverter::toCommentResponseDTO).collect(Collectors.toList()); + .map(comment->CommentConverter.toCommentResponseDTO(comment, member)).collect(Collectors.toList()); return CommentReplyResponseDTO.CommentListResponseDTO.builder() .comments(commentResultListDTO) @@ -132,7 +135,7 @@ public static CommentReplyResponseDTO.CommentListResponseDTO toCommentListRespon //생성 시 단건 답, 댓글 DTO 내부 대댓글 형식 - public static CommentReplyResponseDTO.ReplyResponseDTO toReplyResponseDTO(Reply reply) { + public static CommentReplyResponseDTO.ReplyResponseDTO toReplyResponseDTO(Reply reply,Member member) { String nickname = switch (reply.getAnonymousIndex()) { case -1 -> reply.getMember().getName(); @@ -140,10 +143,12 @@ public static CommentReplyResponseDTO.ReplyResponseDTO toReplyResponseDTO(Reply default -> "익명" + reply.getAnonymousIndex(); }; + boolean isMyComment = reply.getMember()==member; return CommentReplyResponseDTO.ReplyResponseDTO.builder() .commentId(reply.getComment().getId()) .replyId(reply.getId()) .memberId(reply.getMember().getId()) + .isMyComment(isMyComment) .nickname(nickname) .content(reply.getContent()) .createdAt(reply.getCreatedAt()) diff --git a/src/main/java/muit/backend/dto/commentDTO/CommentReplyResponseDTO.java b/src/main/java/muit/backend/dto/commentDTO/CommentReplyResponseDTO.java index 45cdc72..b1b3c97 100644 --- a/src/main/java/muit/backend/dto/commentDTO/CommentReplyResponseDTO.java +++ b/src/main/java/muit/backend/dto/commentDTO/CommentReplyResponseDTO.java @@ -19,6 +19,7 @@ public static class CommentResponseDTO{ private String nickname; private String content; private Long memberId; + private Boolean isMyComment; private LocalDateTime createdAt; private List replies; } @@ -33,6 +34,7 @@ public static class ReplyResponseDTO{ private Long replyId; private String content; private Long memberId; + private Boolean isMyComment; private LocalDateTime createdAt; } diff --git a/src/main/java/muit/backend/service/CommentService.java b/src/main/java/muit/backend/service/CommentService.java index 1f2b83e..af4f738 100644 --- a/src/main/java/muit/backend/service/CommentService.java +++ b/src/main/java/muit/backend/service/CommentService.java @@ -9,7 +9,7 @@ @Service public interface CommentService { - CommentReplyResponseDTO.CommentListResponseDTO getCommentList(Long postId, Integer page, Integer size); + CommentReplyResponseDTO.CommentListResponseDTO getCommentList(Long postId,Member member, Integer page, Integer size); CommentReplyResponseDTO.CommentResponseDTO writeComment(CommentReplyRequestDTO.CommentRequestDTO requestDTO, Long postId, Member member); diff --git a/src/main/java/muit/backend/service/CommentServiceImpl.java b/src/main/java/muit/backend/service/CommentServiceImpl.java index c7aae0b..5c4dfb4 100644 --- a/src/main/java/muit/backend/service/CommentServiceImpl.java +++ b/src/main/java/muit/backend/service/CommentServiceImpl.java @@ -34,10 +34,10 @@ public class CommentServiceImpl implements CommentService { //특정 게시물의 모든 댓글 조회 @Transactional(readOnly = true) @Override - public CommentReplyResponseDTO.CommentListResponseDTO getCommentList(Long postId, Integer page, Integer size) { + public CommentReplyResponseDTO.CommentListResponseDTO getCommentList(Long postId, Member member, Integer page, Integer size) { Post post = postRepository.findById(postId).orElseThrow(()->new GeneralException(ErrorStatus.POST_NOT_FOUND)); Page commentPage = commentRepository.findAllByPost(post, PageRequest.of(page, size)); - return CommentConverter.toCommentListResponseDTO(commentPage); + return CommentConverter.toCommentListResponseDTO(commentPage,member); } //특정 게시물에 댓글 생성 @@ -51,7 +51,7 @@ public CommentReplyResponseDTO.CommentResponseDTO writeComment(CommentReplyReque post.changeCommentCount(true); //comment -> responseDTO - return CommentConverter.toCommentResponseDTO(comment); + return CommentConverter.toCommentResponseDTO(comment,member); } //특정 댓글에 대댓글 생성 @@ -65,7 +65,7 @@ public CommentReplyResponseDTO.ReplyResponseDTO writeReply(CommentReplyRequestDT replyRepository.save(reply); comment.getPost().changeCommentCount(true); - return CommentConverter.toReplyResponseDTO(reply); + return CommentConverter.toReplyResponseDTO(reply,member); } //특정 댓글 삭제