From 857a880806da39432684be64a4d0162299b81660 Mon Sep 17 00:00:00 2001 From: KellyKimHyeJin Date: Mon, 24 Jul 2023 20:31:22 +0900 Subject: [PATCH 1/3] feat: Add Recomment Feature --- .../controller/DiaryCommentController.java | 36 ++++++++++++ .../community/domain/diary/DiaryComment.java | 10 ++++ .../community/dto/DiaryCommentRequestDto.java | 8 +++ .../dto/DiaryCommentResponseDto.java | 9 +-- .../community/dto/DiaryConverter.java | 6 +- .../repository/DiaryCommentRepository.java | 13 ++++- .../repository/DiaryFileRepository.java | 3 +- .../repository/DiaryLikeRepository.java | 4 +- .../service/DiaryCommentService.java | 58 +++++++++++++++++-- .../community/service/DiaryFileService.java | 7 ++- .../community/service/DiaryLikeService.java | 14 ++++- .../community/service/DiaryService.java | 2 +- 12 files changed, 144 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/khureturn/community/controller/DiaryCommentController.java b/src/main/java/com/khureturn/community/controller/DiaryCommentController.java index aa9204c..9b42052 100644 --- a/src/main/java/com/khureturn/community/controller/DiaryCommentController.java +++ b/src/main/java/com/khureturn/community/controller/DiaryCommentController.java @@ -45,6 +45,42 @@ public ResponseEntity deleteComment(@PathVariable(name = "postId")Long pos return ResponseEntity.ok().build(); } + // 대댓글 작성 + @PostMapping("/diary/{postId}/comment/{commentId}/recomment") + public ResponseEntity createReComment(Principal principal, @PathVariable(name = "postId")Long postId, + @PathVariable(name = "commentId")Long commentId, + @RequestBody DiaryCommentRequestDto.CreateRecommentDto request){ + + DiaryComment diaryComment = diaryCommentService.createReComment(principal, postId, commentId, request); + return ResponseEntity.ok(DiaryCommentResponseDto.CreateDiaryCommentDto.builder().commentId(diaryComment.getId()).build()); + } + + // 대댓글 조회 + @GetMapping("/diary/{postId}/comment/{commentId}/recomment") + public ResponseEntity> getRecomment(@PathVariable(name = "postId")Long postId, + @PathVariable(name = "commentId")Long commentId){ + List commentList = diaryCommentService.findAllByDiaryAndComment(postId, commentId); + return ResponseEntity.ok(DiaryConverter.toCommentListDto(commentList)); + } + + + @PatchMapping("/diary/{postId}/comment/{commentId}/recomment/{recommentId}") + public ResponseEntity updateRecomment(@PathVariable(name = "postId")Long postId, + @PathVariable(name = "commentId")Long commentId, + @PathVariable(name = "recommentId")Long recommentId, + @RequestBody DiaryCommentRequestDto.UpdateCommentDto request){ + DiaryComment diaryComment = diaryCommentService.updateReComment(postId, commentId, recommentId, request); + return ResponseEntity.ok(DiaryCommentResponseDto.UpdateDiaryCommentDto.builder().commentId(diaryComment.getId()).build()); + } + + @DeleteMapping("/diary/{postId}/comment/{commentId}/recomment/{recommentId}") + public ResponseEntity deleteRecomment(@PathVariable(name = "postId")Long postId, + @PathVariable(name = "commentId")Long commentId, + @PathVariable(name = "recommentId")Long recommentId){ + diaryCommentService.deleteRecomment(postId, commentId, recommentId); + return ResponseEntity.ok().build(); + } + } \ No newline at end of file diff --git a/src/main/java/com/khureturn/community/domain/diary/DiaryComment.java b/src/main/java/com/khureturn/community/domain/diary/DiaryComment.java index 6ff665d..2251e9d 100644 --- a/src/main/java/com/khureturn/community/domain/diary/DiaryComment.java +++ b/src/main/java/com/khureturn/community/domain/diary/DiaryComment.java @@ -5,6 +5,7 @@ import jakarta.persistence.*; import lombok.*; +import java.util.ArrayList; import java.util.List; @Entity @@ -22,6 +23,13 @@ public class DiaryComment extends BaseEntity { private String diaryHashtag; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parent_id") + private DiaryComment parent; + + @OneToMany(mappedBy = "parent", orphanRemoval = true) + private List children = new ArrayList<>(); + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "diary_id") private Diary diary; @@ -34,4 +42,6 @@ public void update(String diaryCommentContent){ this.diaryCommentContent = diaryCommentContent; } + + } diff --git a/src/main/java/com/khureturn/community/dto/DiaryCommentRequestDto.java b/src/main/java/com/khureturn/community/dto/DiaryCommentRequestDto.java index 44e34f9..a859cb0 100644 --- a/src/main/java/com/khureturn/community/dto/DiaryCommentRequestDto.java +++ b/src/main/java/com/khureturn/community/dto/DiaryCommentRequestDto.java @@ -23,4 +23,12 @@ public static class UpdateCommentDto{ private String content; } + @Builder + @Getter + @AllArgsConstructor(access = AccessLevel.PROTECTED) + @NoArgsConstructor(access = AccessLevel.PROTECTED) + public static class CreateRecommentDto{ + private String content; + } + } diff --git a/src/main/java/com/khureturn/community/dto/DiaryCommentResponseDto.java b/src/main/java/com/khureturn/community/dto/DiaryCommentResponseDto.java index 0563588..d285dfd 100644 --- a/src/main/java/com/khureturn/community/dto/DiaryCommentResponseDto.java +++ b/src/main/java/com/khureturn/community/dto/DiaryCommentResponseDto.java @@ -15,7 +15,7 @@ public class DiaryCommentResponseDto { public static class CommentDto{ private Long commentId; private String content; - //private Long recommentCount; + private int recommentCount; private MemberResponseDto.MemberDto user; private LocalDateTime createdDate; @@ -40,13 +40,6 @@ public static class UpdateDiaryCommentDto{ } - @Builder - @Getter - @AllArgsConstructor(access = AccessLevel.PROTECTED) - @NoArgsConstructor(access = AccessLevel.PROTECTED) - public static class DeleteDiaryCommentDto{ - private Long commentId; - } } diff --git a/src/main/java/com/khureturn/community/dto/DiaryConverter.java b/src/main/java/com/khureturn/community/dto/DiaryConverter.java index 860c367..b608541 100644 --- a/src/main/java/com/khureturn/community/dto/DiaryConverter.java +++ b/src/main/java/com/khureturn/community/dto/DiaryConverter.java @@ -4,6 +4,7 @@ import com.khureturn.community.domain.diary.Diary; import com.khureturn.community.domain.diary.DiaryComment; import com.khureturn.community.domain.diary.DiaryFile; +import com.khureturn.community.repository.DiaryCommentRepository; import com.khureturn.community.repository.DiaryFileRepository; import com.khureturn.community.repository.MemberRepository; import com.khureturn.community.service.DiaryCommentService; @@ -24,6 +25,7 @@ public class DiaryConverter { private static DiaryFileRepository diaryFileRepository; private static DiaryCommentService diaryCommentService; + private static DiaryCommentRepository diaryCommentRepository; private static DiaryService diaryService; public static Diary toDiary(DiaryRequestDto.CreateDiaryDto request, Member member){ @@ -72,7 +74,7 @@ public static List toDiarySortDto(List dia List sortList = new ArrayList<>(); for(Diary d: diaryList){ Member member = d.getMember(); - DiaryFile diaryFile = diaryFileRepository.findByDiary(d.getId()); + DiaryFile diaryFile = diaryFileRepository.findByDiary(d); String url = diaryFile.getDiaryOriginalUrl(); List list = Arrays.asList(url.split(",")); Boolean isLiked = diaryLikeService.findDiaryLikeByMemberAndDiary(member.getMemberId(), d.getId()); @@ -104,9 +106,11 @@ public static List toCommentListDto(List list = new ArrayList<>(); for(DiaryComment c: diaryCommentList){ Member member = c.getMember(); + int reCommentCount = diaryCommentRepository.countAllByParent(c.getParent()); DiaryCommentResponseDto.CommentDto comment = DiaryCommentResponseDto.CommentDto.builder() .commentId(c.getId()) .content(c.getDiaryCommentContent()) + .recommentCount(reCommentCount) .user(MemberResponseDto.MemberDto.builder().memberId(member.getMemberId()).profileImgURL(member.getProfileImg()).name(member.getName()).build()) .createdDate(c.getCreatedAt()) .build(); diff --git a/src/main/java/com/khureturn/community/repository/DiaryCommentRepository.java b/src/main/java/com/khureturn/community/repository/DiaryCommentRepository.java index 414c7b0..3287148 100644 --- a/src/main/java/com/khureturn/community/repository/DiaryCommentRepository.java +++ b/src/main/java/com/khureturn/community/repository/DiaryCommentRepository.java @@ -10,13 +10,20 @@ public interface DiaryCommentRepository extends JpaRepository { - List findAllByDiary(Long diaryId); + List findAllByDiary(Diary diary); - void deleteByDiaryAndId(Long diaryId, Long diaryCommentId); + void deleteByDiaryAndId(Diary diary, Long diaryCommentId); DiaryComment findByIdAndDiary(Long diaryCommentId, Diary diary); - int countAllByDiary(Long diaryId); + DiaryComment findByIdAndDiaryAndParent(Long recommentId, Diary diary, DiaryComment parent); + + int countAllByParent(DiaryComment parent); + + void deleteByDiaryAndParentAndId(Diary diary, DiaryComment parent, Long recommendId); + + List findAllByDiaryAndParent(Diary diary, DiaryComment parent); + } diff --git a/src/main/java/com/khureturn/community/repository/DiaryFileRepository.java b/src/main/java/com/khureturn/community/repository/DiaryFileRepository.java index 369ce7f..cb79c1e 100644 --- a/src/main/java/com/khureturn/community/repository/DiaryFileRepository.java +++ b/src/main/java/com/khureturn/community/repository/DiaryFileRepository.java @@ -1,8 +1,9 @@ package com.khureturn.community.repository; +import com.khureturn.community.domain.diary.Diary; import com.khureturn.community.domain.diary.DiaryFile; import org.springframework.data.jpa.repository.JpaRepository; public interface DiaryFileRepository extends JpaRepository { - DiaryFile findByDiary(Long diaryId); + DiaryFile findByDiary(Diary diary); } diff --git a/src/main/java/com/khureturn/community/repository/DiaryLikeRepository.java b/src/main/java/com/khureturn/community/repository/DiaryLikeRepository.java index 967afbd..33b5941 100644 --- a/src/main/java/com/khureturn/community/repository/DiaryLikeRepository.java +++ b/src/main/java/com/khureturn/community/repository/DiaryLikeRepository.java @@ -9,7 +9,7 @@ import java.util.Optional; public interface DiaryLikeRepository extends JpaRepository { - boolean existsDiaryLikeByMemberAndDiary(Long memberId, Long diaryId); + boolean existsDiaryLikeByMemberAndDiary(Member member, Diary diary); - Optional findByMemberAndDiary(Long memberId, Long diaryId); + Optional findByMemberAndDiary(Member member, Diary diary); } diff --git a/src/main/java/com/khureturn/community/service/DiaryCommentService.java b/src/main/java/com/khureturn/community/service/DiaryCommentService.java index 200beea..7ddd7e7 100644 --- a/src/main/java/com/khureturn/community/service/DiaryCommentService.java +++ b/src/main/java/com/khureturn/community/service/DiaryCommentService.java @@ -1,6 +1,5 @@ package com.khureturn.community.service; - import com.khureturn.community.domain.Member; import com.khureturn.community.domain.diary.Diary; import com.khureturn.community.domain.diary.DiaryComment; @@ -8,6 +7,7 @@ import com.khureturn.community.exception.NotFoundException; import com.khureturn.community.repository.DiaryCommentRepository; import com.khureturn.community.repository.DiaryRepository; +import com.khureturn.community.repository.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -19,8 +19,8 @@ public class DiaryCommentService { private final DiaryRepository diaryRepository; - private final DiaryCommentRepository diaryCommentRepository; + private final MemberRepository memberRepository; public DiaryComment create(Long diaryId, DiaryCommentRequestDto.CreateCommentDto request, Principal principal){ Diary diary = diaryRepository.findById(diaryId) @@ -38,20 +38,66 @@ public DiaryComment create(Long diaryId, DiaryCommentRequestDto.CreateCommentDto } public DiaryComment update(Long diaryId, Long diaryCommentId, DiaryCommentRequestDto.UpdateCommentDto request){ - Diary diary = diaryRepository.findById(diaryId).get(); + Diary diary = diaryRepository.findById(diaryId) + .orElseThrow(()-> new NotFoundException("Diary를 찾을 수 없습니다.")); DiaryComment diaryComment = diaryCommentRepository.findByIdAndDiary(diaryCommentId, diary); diaryComment.update(request.getContent()); return diaryComment; } public List findAllByDiary(Long diaryId){ - return diaryCommentRepository.findAllByDiary(diaryId); + Diary diary = diaryRepository.findById(diaryId) + .orElseThrow(()-> new NotFoundException("Diary를 찾을 수 없습니다.")); + return diaryCommentRepository.findAllByDiary(diary); } public void delete(Long diaryId, Long diaryCommentId){ Diary diary = diaryRepository.findById(diaryId) - .orElseThrow(() -> new NotFoundException("Diary를 찾을 수 없습니다"));; - diaryCommentRepository.deleteByDiaryAndId(diaryId, diaryCommentId); + .orElseThrow(() -> new NotFoundException("Diary를 찾을 수 없습니다")); + diaryCommentRepository.deleteByDiaryAndId(diary, diaryCommentId); + } + + public DiaryComment createReComment(Principal principal, Long diaryId, Long commentId, DiaryCommentRequestDto.CreateRecommentDto request){ + Diary diary = diaryRepository.findById(diaryId) + .orElseThrow(()-> new NotFoundException("Diary를 찾을 수 없습니다.")); + Member member = memberRepository.findByName(principal.getName()); + DiaryComment diaryComment = diaryCommentRepository.findById(commentId) + .orElseThrow(() -> new NotFoundException("댓글을 찾을 수 없습니다.")); + DiaryComment diaryRecomment = DiaryComment.builder() + .diaryCommentContent(request.getContent()) + .parent(diaryComment) + .diary(diary) + .member(member) + .build(); + + return diaryCommentRepository.save(diaryRecomment); + + } + + public DiaryComment updateReComment(Long diaryId, Long commentId, Long recommentId, DiaryCommentRequestDto.UpdateCommentDto request){ + Diary diary = diaryRepository.findById(diaryId) + .orElseThrow(()-> new NotFoundException("Diary를 찾을 수 없습니다.")); + DiaryComment parent = diaryCommentRepository.findByIdAndDiary(commentId, diary); + DiaryComment reComment = diaryCommentRepository.findByIdAndDiaryAndParent(recommentId, diary, parent); + reComment.update(request.getContent()); + return reComment; + + } + + public List findAllByDiaryAndComment(Long diaryId, Long commentId){ + Diary diary = diaryRepository.findById(diaryId) + .orElseThrow(()-> new NotFoundException("Diary를 찾을 수 없습니다.")); + DiaryComment parent = diaryCommentRepository.findByIdAndDiary(commentId, diary); + List reCommentList = diaryCommentRepository.findAllByDiaryAndParent(diary, parent); + return reCommentList; + } + + public void deleteRecomment(Long diaryId, Long commentId, Long recommentId){ + Diary diary = diaryRepository.findById(diaryId) + .orElseThrow(() -> new NotFoundException("Diary를 찾을 수 없습니다.")); + DiaryComment parent = diaryCommentRepository.findByIdAndDiary(commentId, diary); + diaryCommentRepository.deleteByDiaryAndParentAndId(diary, parent, recommentId); + } diff --git a/src/main/java/com/khureturn/community/service/DiaryFileService.java b/src/main/java/com/khureturn/community/service/DiaryFileService.java index 04b2780..3a283e2 100644 --- a/src/main/java/com/khureturn/community/service/DiaryFileService.java +++ b/src/main/java/com/khureturn/community/service/DiaryFileService.java @@ -2,7 +2,9 @@ import com.khureturn.community.domain.diary.Diary; import com.khureturn.community.domain.diary.DiaryFile; +import com.khureturn.community.exception.NotFoundException; import com.khureturn.community.repository.DiaryFileRepository; +import com.khureturn.community.repository.DiaryRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; @@ -18,6 +20,7 @@ public class DiaryFileService { public final DiaryFileRepository diaryFileRepository; + public final DiaryRepository diaryRepository; public static String fileUpload(List medias) throws IOException { @@ -34,7 +37,9 @@ public static String fileUpload(List medias) throws IOException { } public DiaryFile findByDiary(Long diaryId){ - return diaryFileRepository.findByDiary(diaryId); + Diary diary = diaryRepository.findById(diaryId) + .orElseThrow(() -> new NotFoundException("Diary를 찾을 수 없습니다.")); + return diaryFileRepository.findByDiary(diary); } } diff --git a/src/main/java/com/khureturn/community/service/DiaryLikeService.java b/src/main/java/com/khureturn/community/service/DiaryLikeService.java index 1fce056..2a83029 100644 --- a/src/main/java/com/khureturn/community/service/DiaryLikeService.java +++ b/src/main/java/com/khureturn/community/service/DiaryLikeService.java @@ -8,20 +8,24 @@ import com.khureturn.community.exception.NotFoundException; import com.khureturn.community.repository.DiaryLikeRepository; import com.khureturn.community.repository.DiaryRepository; +import com.khureturn.community.repository.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.awt.*; + @Service @RequiredArgsConstructor public class DiaryLikeService { private final DiaryRepository diaryRepository; private final DiaryLikeRepository diaryLikeRepository; + private final MemberRepository memberRepository; public void diaryLike(Long diaryId, Member member){ Diary diary = diaryRepository.findById(diaryId) .orElseThrow(() -> new NotFoundException("Diary를 찾을 수 없습니다")); - if(diaryLikeRepository.existsDiaryLikeByMemberAndDiary(member.getMemberId(), diaryId)){ + if(diaryLikeRepository.existsDiaryLikeByMemberAndDiary(member, diary)){ throw new DuplicateInsertionException("이미 좋아요가 존재합니다."); } @@ -38,7 +42,7 @@ public void diaryLike(Long diaryId, Member member){ public void diaryUnlike(Long diaryId, Member member){ Diary diary = diaryRepository.findById(diaryId) .orElseThrow(() -> new NotFoundException("Diary를 찾을 수 없습니다")); - DiaryLike diaryLike = diaryLikeRepository.findByMemberAndDiary(member.getMemberId(), diaryId) + DiaryLike diaryLike = diaryLikeRepository.findByMemberAndDiary(member, diary) .orElseThrow(() -> new NotFoundException("좋아요를 찾을 수 없습니다")); diaryLikeRepository.delete(diaryLike); @@ -47,7 +51,11 @@ public void diaryUnlike(Long diaryId, Member member){ } public Boolean findDiaryLikeByMemberAndDiary(Long memberId, Long diaryId){ - Boolean isLiked = diaryLikeRepository.existsDiaryLikeByMemberAndDiary(memberId, diaryId); + Member member = memberRepository.findById(memberId) + .orElseThrow(() -> new NotFoundException("유저를 찾을 수 없습니다.")); + Diary diary = diaryRepository.findById(diaryId) + .orElseThrow(()->new NotFoundException("Diary를 찾을 수 없습니다.")); + Boolean isLiked = diaryLikeRepository.existsDiaryLikeByMemberAndDiary(member, diary); return isLiked; } diff --git a/src/main/java/com/khureturn/community/service/DiaryService.java b/src/main/java/com/khureturn/community/service/DiaryService.java index fafda3d..8a9a6ca 100644 --- a/src/main/java/com/khureturn/community/service/DiaryService.java +++ b/src/main/java/com/khureturn/community/service/DiaryService.java @@ -80,7 +80,7 @@ public List getPage(Long cursorId, int size){ public List getPageByLike(Long cursorId, int size, String search){ PageRequest pageRequest = PageRequest.of(0,size); - Page fetchPages = diaryRepository.findByDiaryContentContainingIgnoreCaseAndIdLessThanOrderByDiaryLikeCountDesc(search, cursorId,pageRequest); + Page fetchPages = diaryRepository.findByDiaryContentContainingIgnoreCaseAndIdLessThanOrderByDiaryLikeCountDesc(search, cursorId, pageRequest); return fetchPages.getContent(); } From 1291c5e20920e3b1e3ae892dc41e44421aec3c7b Mon Sep 17 00:00:00 2001 From: KellyKimHyeJin Date: Mon, 24 Jul 2023 20:31:52 +0900 Subject: [PATCH 2/3] feat: Add Recomment Feature --- ...3\246\260\354\203\267 2023-03-06 214344.png" | Bin 73008 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "medias/\354\212\244\355\201\254\353\246\260\354\203\267 2023-03-06 214344.png" diff --git "a/medias/\354\212\244\355\201\254\353\246\260\354\203\267 2023-03-06 214344.png" "b/medias/\354\212\244\355\201\254\353\246\260\354\203\267 2023-03-06 214344.png" deleted file mode 100644 index f869ae5d46ded06f29f75c9cf4b2b72df6ae88e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73008 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

*@M9PUIdjBbw| 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 Date: Wed, 26 Jul 2023 12:54:20 +0900 Subject: [PATCH 3/3] fix: Fix Diary Authorization --- .../community/controller/DiaryCommentController.java | 12 +++++++++--- .../community/controller/DiaryController.java | 7 ++++++- .../community/controller/DiaryLikeController.java | 3 +++ .../community/controller/DiaryScrapController.java | 3 +++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/khureturn/community/controller/DiaryCommentController.java b/src/main/java/com/khureturn/community/controller/DiaryCommentController.java index 9b42052..adcc16e 100644 --- a/src/main/java/com/khureturn/community/controller/DiaryCommentController.java +++ b/src/main/java/com/khureturn/community/controller/DiaryCommentController.java @@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.security.Principal; @@ -20,25 +21,28 @@ public class DiaryCommentController { private final DiaryCommentService diaryCommentService; + @PreAuthorize("isAuthenticated()") @PostMapping("/diary/{postId}/comment") public ResponseEntity createComment(Principal principal, @PathVariable(name = "postId")Long postId, @RequestBody DiaryCommentRequestDto.CreateCommentDto request){ DiaryComment diaryComment = diaryCommentService.create(postId, request, principal); return ResponseEntity.ok(DiaryCommentResponseDto.CreateDiaryCommentDto.builder().commentId(diaryComment.getId()).build()); } + @PreAuthorize("isAuthenticated()") @PatchMapping("/diary/{postId}/comment/{commentId}") public ResponseEntity updateComment(@PathVariable(name = "postId")Long postId, @PathVariable(name = "commentId")Long commentId, @RequestBody DiaryCommentRequestDto.UpdateCommentDto request){ DiaryComment diaryComment = diaryCommentService.update(postId, commentId, request); return ResponseEntity.ok(DiaryCommentResponseDto.UpdateDiaryCommentDto.builder().commentId(diaryComment.getId()).build()); } - // 댓글 조회 + @PreAuthorize("isAuthenticated()") @GetMapping("/diary/{postId}/comment") public ResponseEntity> getComment(@PathVariable(name = "postId")Long postId){ List commentList = diaryCommentService.findAllByDiary(postId); return ResponseEntity.ok(DiaryConverter.toCommentListDto(commentList)); } + @PreAuthorize("isAuthenticated()") @DeleteMapping("/diary/{postId}/comment/{commentId}") public ResponseEntity deleteComment(@PathVariable(name = "postId")Long postId, @PathVariable(name = "commentId")Long commentId){ diaryCommentService.delete(postId,commentId); @@ -46,6 +50,7 @@ public ResponseEntity deleteComment(@PathVariable(name = "postId")Long pos } // 대댓글 작성 + @PreAuthorize("isAuthenticated()") @PostMapping("/diary/{postId}/comment/{commentId}/recomment") public ResponseEntity createReComment(Principal principal, @PathVariable(name = "postId")Long postId, @PathVariable(name = "commentId")Long commentId, @@ -56,6 +61,7 @@ public ResponseEntity createReCom } // 대댓글 조회 + @PreAuthorize("isAuthenticated()") @GetMapping("/diary/{postId}/comment/{commentId}/recomment") public ResponseEntity> getRecomment(@PathVariable(name = "postId")Long postId, @PathVariable(name = "commentId")Long commentId){ @@ -63,7 +69,7 @@ public ResponseEntity> getRecomment(@Pa return ResponseEntity.ok(DiaryConverter.toCommentListDto(commentList)); } - + @PreAuthorize("isAuthenticated()") @PatchMapping("/diary/{postId}/comment/{commentId}/recomment/{recommentId}") public ResponseEntity updateRecomment(@PathVariable(name = "postId")Long postId, @PathVariable(name = "commentId")Long commentId, @@ -72,7 +78,7 @@ public ResponseEntity updateRecom DiaryComment diaryComment = diaryCommentService.updateReComment(postId, commentId, recommentId, request); return ResponseEntity.ok(DiaryCommentResponseDto.UpdateDiaryCommentDto.builder().commentId(diaryComment.getId()).build()); } - + @PreAuthorize("isAuthenticated()") @DeleteMapping("/diary/{postId}/comment/{commentId}/recomment/{recommentId}") public ResponseEntity deleteRecomment(@PathVariable(name = "postId")Long postId, @PathVariable(name = "commentId")Long commentId, diff --git a/src/main/java/com/khureturn/community/controller/DiaryController.java b/src/main/java/com/khureturn/community/controller/DiaryController.java index e9f1350..826f5c4 100644 --- a/src/main/java/com/khureturn/community/controller/DiaryController.java +++ b/src/main/java/com/khureturn/community/controller/DiaryController.java @@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.hibernate.validator.constraints.ModCheck; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -33,6 +34,7 @@ public class DiaryController { private final MemberService memberService; + @PreAuthorize("isAuthenticated()") @PostMapping("") public ResponseEntity createDiary(Principal principal, @RequestPart(value = "mediaList", required= false)List mediaList, @RequestPart(value = "data")DiaryRequestDto.CreateDiaryDto data) throws IOException { @@ -40,13 +42,16 @@ public ResponseEntity createDiary(Principal pri return ResponseEntity.ok(DiaryResponseDto.CreateDiaryDto.builder().postId(diary.getId()).build()); } + @PreAuthorize("isAuthenticated()") @PutMapping("/{postId}") public ResponseEntity updateDiary(@PathVariable(name = "postId")Long postId, @RequestBody DiaryRequestDto.UpdateDiaryDto data){ Diary diary = diaryService.update(postId, data); return ResponseEntity.ok(DiaryResponseDto.UpdateDiaryDto.builder().postId(diary.getId()).build()); } + // 일기장 상세조회 + @PreAuthorize("isAuthenticated()") @GetMapping("/{postId}") public ResponseEntity getDiary(@PathVariable(name = "postId") Long postId){ Diary diary = diaryService.findById(postId); @@ -81,7 +86,7 @@ public ResponseEntity> getDiaryListByView(@R return ResponseEntity.ok(DiaryConverter.toDiarySortDto(diaryList)); } - + @PreAuthorize("isAuthenticated()") @DeleteMapping("/{postId}") public ResponseEntity deleteDiary(@PathVariable(name = "postId")Long postId){ diaryService.delete(postId); diff --git a/src/main/java/com/khureturn/community/controller/DiaryLikeController.java b/src/main/java/com/khureturn/community/controller/DiaryLikeController.java index 0d81284..d66988c 100644 --- a/src/main/java/com/khureturn/community/controller/DiaryLikeController.java +++ b/src/main/java/com/khureturn/community/controller/DiaryLikeController.java @@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.security.Principal; @@ -20,6 +21,7 @@ public class DiaryLikeController { private final DiaryLikeService diaryLikeService; private final MemberService memberService; + @PreAuthorize("isAuthenticated()") @PostMapping("/{postId}/like") public ResponseEntity createLike(Principal principal, @PathVariable(name = "postId")Long postId){ String name = principal.getName(); @@ -28,6 +30,7 @@ public ResponseEntity createLike(Principal principal, @PathVariable(name = return ResponseEntity.ok().build(); } + @PreAuthorize("isAuthenticated()") @DeleteMapping("/{postId}/like") public ResponseEntity deleteLike(Principal principal, @PathVariable(name = "postId")Long postId){ String name = principal.getName(); diff --git a/src/main/java/com/khureturn/community/controller/DiaryScrapController.java b/src/main/java/com/khureturn/community/controller/DiaryScrapController.java index d0175d2..d91da7e 100644 --- a/src/main/java/com/khureturn/community/controller/DiaryScrapController.java +++ b/src/main/java/com/khureturn/community/controller/DiaryScrapController.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.security.Principal; @@ -19,6 +20,7 @@ public class DiaryScrapController { private final DiaryScrapService diaryScrapService; private final MemberService memberService; + @PreAuthorize("isAuthenticated()") @PostMapping("/{postId}/bookmark") public ResponseEntity createLike(Principal principal, @PathVariable(name = "postId")Long postId){ String name = principal.getName(); @@ -27,6 +29,7 @@ public ResponseEntity createLike(Principal principal, @PathVariable(name = return ResponseEntity.ok().build(); } + @PreAuthorize("isAuthenticated()") @DeleteMapping("/{postId}/bookmark") public ResponseEntity deleteLike(Principal principal, @PathVariable(name = "postId")Long postId){ String name = principal.getName();