diff --git a/p4th/JinjuPark/spring/demo/build.gradle b/p4th/JinjuPark/spring/demo/build.gradle index a03f9f7b..9e074f4a 100644 --- a/p4th/JinjuPark/spring/demo/build.gradle +++ b/p4th/JinjuPark/spring/demo/build.gradle @@ -24,8 +24,9 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-redis' + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' - compileOnly 'org.projectlombok:lombok' + compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/controller/board/RecommendController.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/controller/board/RecommendController.java index 4492d33f..86e1f34a 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/controller/board/RecommendController.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/controller/board/RecommendController.java @@ -18,13 +18,19 @@ public class RecommendController { private RecommendService service; @PostMapping("/recommend") - public List diaryThumbStatus (@RequestBody ThumbUpDown thumbUpDown) { + public List diaryThumbUpDown (@RequestBody ThumbUpDown thumbUpDown) { log.info("다이어리 추천_비추천 메소드 실행- 게시물번호: "+ thumbUpDown.getBoardNo()); Long memberId = thumbUpDown.getMemberId(); Long boardNo = thumbUpDown.getBoardNo(); String thumbType = thumbUpDown.getThumbType(); - return service.recommendStatus(memberId, boardNo, thumbType); + return service.recommendUpDown(memberId, boardNo, thumbType); } + @GetMapping("/recommend/{boardNo}") + public List diaryThumbStatus (@PathVariable("boardNo") Long boardNo) { + log.info("다이어리 추천수 Read()"); + + return service.recommendStatus(boardNo); + } } diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/response/CommentResponse.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/controller/board/response/CommentResponse.java similarity index 78% rename from p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/response/CommentResponse.java rename to p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/controller/board/response/CommentResponse.java index d72e5343..2430e923 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/response/CommentResponse.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/controller/board/response/CommentResponse.java @@ -1,4 +1,4 @@ -package kr.pjj.demo.entity.board.response; +package kr.pjj.demo.controller.board.response; import lombok.Data; diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/Comment.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/Comment.java index 51fed4a7..78e82fcf 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/Comment.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/Comment.java @@ -33,7 +33,7 @@ public class Comment { @Column private String content; - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "board_id") private Diary diary; diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/Diary.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/Diary.java index bcfee903..22134acb 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/Diary.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/entity/board/Diary.java @@ -13,9 +13,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; -import java.util.ArrayList; import java.util.Date; -import java.util.List; @Data @Entity @@ -28,14 +26,14 @@ public class Diary { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long boardNo; - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="category_id") private Category category; @Column(length = 128, nullable = false) private String title; - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="member_id") private Member member; @@ -60,20 +58,11 @@ public class Diary { @UpdateTimestamp private Date updDate; - @JsonIgnore - @OneToMany(mappedBy = "diary", fetch = FetchType.EAGER) - private List comments = new ArrayList<>(); - - @JsonIgnore - @OneToMany(mappedBy = "diary", fetch = FetchType.LAZY) - private List images = new ArrayList<>(); - @PrePersist public void onPrePersist(){ this.regDate = LocalDateTime.now().format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)); } - //테스트 케이스용 메소드들 public Diary ( String title, String authority, String content) { this.title = title; this.authority = authority; @@ -84,9 +73,6 @@ public void modifyDiary(String title, String content){ this.title= title; this.content= content; } - public void setComment (Comment comment) { - comments.add(comment); - comment.setDiary(this); - } + } diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/CommentRepository.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/CommentRepository.java index 8c27dfaf..4d0e796a 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/CommentRepository.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/CommentRepository.java @@ -8,6 +8,6 @@ public interface CommentRepository extends JpaRepository { - @Query("select c from Comment c join c.diary dy where dy.boardNo = :boardNo") + @Query("select c from Comment c join fetch c.diary dy join fetch dy.category dyc join fetch dy.member dym where dy.boardNo = :boardNo") List findAllCommentsByBoardId(Long boardNo); } diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/DiaryRepository.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/DiaryRepository.java index d4bdfd9e..ca9f631a 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/DiaryRepository.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/DiaryRepository.java @@ -6,32 +6,36 @@ import java.util.List; +import java.util.Optional; public interface DiaryRepository extends JpaRepository { + @Query("select d from Diary d join fetch d.category dc join fetch d.member dm where d.boardNo= :boardNo") + Optional findByDiaryId(Long boardNo); + //전체 게시판 리스트 출력(공개글) - @Query("select d from Diary d where d.authority= '공개' order by d.boardNo desc ") + @Query("select d from Diary d join fetch d.category dc join fetch d.member dm where d.authority= '공개' order by d.boardNo desc ") List findDiaryByPublicBoardNoDesc(); //전체 검색창(공개글) - @Query("select d from Diary d where d.authority= '공개' and (d.title like %:title% or d.content like %:content%) order by d.boardNo desc") + @Query("select d from Diary d join fetch d.category dc join fetch d.member dm where d.authority= '공개' and (d.title like %:title% or d.content like %:content%) order by d.boardNo desc") List findDiaryByPublicAndTitleContaining(String title, String content); // 페이지별 게시판 리스트 출력(공개글) - @Query("select d from Diary d join d.category dc where d.authority= '공개' and dc.pageNo = :pageNo order by d.boardNo desc ") + @Query("select d from Diary d join fetch d.category dc join fetch d.member dm where d.authority= '공개' and dc.pageNo = :pageNo order by d.boardNo desc ") List findDiaryByPublicAndPageNoOrderByBoardNoDesc(Long pageNo); // 페이지 게시판 검색 (공개글) - @Query("select d from Diary d where d.authority= '공개' and d.category.pageNo = :pageNo and (d.title like %:title% or d.content like %:content%) order by d.boardNo desc") + @Query("select d from Diary d join fetch d.category dc join fetch d.member dm where d.authority= '공개' and d.category.pageNo = :pageNo and (d.title like %:title% or d.content like %:content%) order by d.boardNo desc") List findDiaryByPageNoAndTitleContaining(Long pageNo, String title, String content); // 마이페이지 리스트 출력 (공개 + 비공개글) - @Query("select d from Diary d where d.member.id = :memberId order by d.boardNo desc ") + @Query("select d from Diary d join fetch d.category dc join fetch d.member dm where d.member.id = :memberId order by d.boardNo desc ") List findMyDiaryByMemberIdOrderByBoardNoDesc(Long memberId); diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/ImageRepository.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/ImageRepository.java index 5a7e0430..bab78a2c 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/ImageRepository.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/ImageRepository.java @@ -7,9 +7,6 @@ import java.util.List; public interface ImageRepository extends JpaRepository { - @Query("select i.reName from Image i join i.diary iy where iy.boardNo =:boardNo") - List findImagesByBoardNo(Long boardNo); - - @Query("select i from Image i join i.diary iy where iy.boardNo = :boardNo") + @Query("select i from Image i join fetch i.diary iy where iy.boardNo = :boardNo") List findAllImagesByBoardId(Long boardNo); } diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/RecommendRepository.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/RecommendRepository.java index dcf51f70..6520e3b9 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/RecommendRepository.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/board/RecommendRepository.java @@ -13,6 +13,6 @@ public interface RecommendRepository extends JpaRepository { @Query("select r from Recommend r join fetch r.diary join fetch r.member where r.diary.boardNo = :board_id and r.member.id= :member_id") Optional findByDiaryAndMember(Long board_id, Long member_id); - @Query("select r from Recommend r join r.diary dy where dy.boardNo = :boardNo") + @Query("select r from Recommend r join fetch r.diary dy where dy.boardNo = :boardNo") List findAllRecommendsByBoardId(Long boardNo); } \ No newline at end of file diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/video/MemberSaveVideoRepository.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/video/MemberSaveVideoRepository.java index bd3d6f38..e7f94dfc 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/video/MemberSaveVideoRepository.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/repository/video/MemberSaveVideoRepository.java @@ -11,13 +11,12 @@ public interface MemberSaveVideoRepository extends JpaRepository findByMemberIdAndVideoId(Long memberId, Long videoId); //멤버아이디로 일치하는 비디오리스트 검색 - @Query("select msv.video.src from MemberSaveVideo msv join msv.member mm where mm.id = :memberId") - List findMemberSaveVideoByMemberId(Long memberId); - + @Query(value = "select msv from MemberSaveVideo msv join fetch msv.video mv join fetch msv.member mm where mm.id = :memberId") + List findMemberSaveVideoByMemberId(Long memberId); } diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/DiaryServiceImpl.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/DiaryServiceImpl.java index bde2d326..719d1534 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/DiaryServiceImpl.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/DiaryServiceImpl.java @@ -186,7 +186,7 @@ public Diary registerDiaryContents(DiaryRequest diaryRequest){ @Override public Diary read(Long boardNo) { //findById 사용할 때는 Optional 사용 -> 객체가 Board 아닐 가능성도 있기때문에 - Optional maybeDiary = repository.findById(boardNo); + Optional maybeDiary = repository.findByDiaryId(boardNo); if (maybeDiary.equals(Optional.empty())) { log.info("Can't read board!!!"); @@ -205,18 +205,25 @@ public Diary read(Long boardNo) { @Override public Diary modify(DiaryModify diaryModify) { - Optional maybeDiary = repository.findById(diaryModify.getBoardNo()); + Optional maybeDiary = repository.findByDiaryId(diaryModify.getBoardNo()); if (maybeDiary.equals(Optional.empty())) { log.info("Can't modify board!!!"); } Diary diary= maybeDiary.get(); diary.setTitle(diaryModify.getTitle()); diary.setContent(diaryModify.getContent()); - return repository.save(diary); + + repository.save(diary); + return diary; } @Override public void remove(Long boardNo) { + + Optional maybeDiary = repository.findByDiaryId(boardNo); + Long categoryId = maybeDiary.get().getCategory().getId(); + + List commentList = commentRepository.findAllCommentsByBoardId(boardNo); for (Comment comment : commentList) { @@ -236,8 +243,7 @@ public void remove(Long boardNo) { } repository.deleteById(boardNo); - categoryRepository.deleteById(boardNo); // 다이어리 먼저 지우고 카테고리 지워야 함 + categoryRepository.deleteById(categoryId); } - } diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/ImageServiceImpl.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/ImageServiceImpl.java index 7e6b29d4..2cc8ce2d 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/ImageServiceImpl.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/ImageServiceImpl.java @@ -1,13 +1,14 @@ package kr.pjj.demo.service.board; +import kr.pjj.demo.entity.board.Image; import kr.pjj.demo.repository.board.DiaryRepository; import kr.pjj.demo.repository.board.ImageRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; -import java.util.Optional; @Slf4j @Service @@ -20,14 +21,19 @@ public class ImageServiceImpl implements ImageService{ DiaryRepository diaryRepository; @Override - public List read(Long boardNo){ + public List read(Long boardNo) { - //이미지 reName 리스트 리턴 - List images = imageRepository.findImagesByBoardNo(boardNo); + log.info("이미지 게시판 보드 넘버:" + boardNo); + List imageList = imageRepository.findAllImagesByBoardId(boardNo); + List images = new ArrayList<>(); - if(images.equals(Optional.empty())){ - return null; + if(imageList.size() > 0){ + log.info("이미지 있는 경우"); + for (int i = 0; i < imageList.size(); i++) { + images.add(i, imageList.get(i).getReName()); + } } + return images; } } diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/RecommendService.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/RecommendService.java index e3945821..76bc0236 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/RecommendService.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/RecommendService.java @@ -3,5 +3,6 @@ import java.util.List; public interface RecommendService { - public List recommendStatus(Long memberId, Long boardNo, String thumbType); + public List recommendStatus(Long boardNo); + public List recommendUpDown(Long memberId, Long boardNo, String thumbType); } diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/RecommendServiceImpl.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/RecommendServiceImpl.java index 9a50332f..cdc1a14a 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/RecommendServiceImpl.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/board/RecommendServiceImpl.java @@ -30,8 +30,7 @@ public class RecommendServiceImpl implements RecommendService{ @Override - public List recommendStatus(Long memberId, Long boardNo, String thumbType){ - final String THUMB_CHECK = "thumbCheck"; + public List recommendUpDown(Long memberId, Long boardNo, String thumbType){ final String THUMB_UP = "thumbUp"; final String THUMB_DOWN = "thumbDown"; @@ -42,12 +41,7 @@ public List recommendStatus(Long memberId, Long boardNo, String thumbTy Diary diary = maybeDiary.get(); List thumbStatus = new ArrayList<>(); - // 1. 추천/비추천수 조회인 경우 하단의 JPQL 검색쿼리 전에 실행 - if(Objects.equals(thumbType, "THUMB_CHECK")){ - thumbStatus.add(diary.getLikes()); - thumbStatus.add(diary.getNoLikes()); - return thumbStatus; - } + Optional maybeRecommend = recommendRepository.findByDiaryAndMember(boardNo, memberId); Optional maybeMember = memberRepository.findById(memberId) ; @@ -135,6 +129,18 @@ public List recommendStatus(Long memberId, Long boardNo, String thumbTy return thumbStatus; } + + public List recommendStatus(Long boardNo){ + + Optional maybeDiary = diaryRepository.findById(boardNo); + Diary diary = maybeDiary.get(); + List thumbStatus = new ArrayList<>(); + + thumbStatus.add(diary.getLikes()); + thumbStatus.add(diary.getNoLikes()); + return thumbStatus; + + } } // 추천/ 비추천 멤버 id 당 1번 가능하고, 다시 누를 시 추천/비추천 취소되는 기능 //1. thump 타입(thumbCheck, thumbUp, thumbDown)을 확인 // (1) thumbCheck 상태체크면 그냥 값만 리턴 (게시글 상세페이지에 첫 reload 시 해당 게시글의 추천/비추천수 출력용) diff --git a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/video/VideoServiceImpl.java b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/video/VideoServiceImpl.java index 94fb386f..b11cf8f0 100644 --- a/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/video/VideoServiceImpl.java +++ b/p4th/JinjuPark/spring/demo/src/main/java/kr/pjj/demo/service/video/VideoServiceImpl.java @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -36,15 +37,20 @@ public List