TIL을 작성하지 않은지 또 며칠이 흘렀다. 중간 발표 이 후 정신을 못차리고 있는데 진짜 각성하자..!
채팅방 생성을 위해서는 memberId가 필요한데 이를 위해 게시물 상세 조회 시 응답값으로 memberId를 리턴.
댓글 최신순 정렬
게시물 날짜 별 조회 시, 기존 방법으로 yyyy-MM-dd으로 요청하더라도 00시 00분부터 23시 59분까지 해당일 게시물 목록 모두 조회하도록 수정
이바울 멘토님께서 시간 다루는 쿼리가 힘들수도 있다고 하셨는데 진짜 힘들다.. 일단 시간 클래스에 대해서도 공부를 해야 하고, 쿼리를 날리는 방법도 공부를 해야 해서 요즘 프로젝트를 하고 있다기 보다는 공부를 하는 중이다.
현재 dueDay(봉사활동 시간)의 데이터 타입은 TimeStamp이고 양식은 'yyyy-MM-dd hh:mm:ss' 형태이다. 이중에서 날짜 타입인 'yyyy-MM-dd' 만으로 해당일의 게시물 목록을 조회하려고 한다. 여러가지 방법이 생각이 났지만 하나도 확신이 없는 방법이였다. 아직까지는 sql도 공부중이여서 쿼리메서드를 활용할 수 있는 방법을 찾아보다가 Between이라는 키워드를 알게 되었다. 매개변수로 처음값과 마지막값을 넣어주고 메서드명에 between을 선언해주면 처음값과 마지막값 사이의 데이터를 조회할 수 있다.
List<Board> findAllByDueDayBetween(Timestamp start, Timestamp end, Pageable pageable);
요청받을 때는 'yyyy-MM-dd' 형태의 문자열을 요청받아서 이 문자열을 TimeStamp 데이터로 변환하는데 처음값을 00:00:00 마지막값을 23:59:59로 설정해서 변환을 하면 해당일의 게시물 목록을 모두 불러올 수 있어서 일단 이렇게 임시로 수정해 놓았다.
댓글을 최신순으로 정렬해야 최근 댓글이 맨 위에 보일 것 같다는 경일 님의 요청에 따라 최신순으로 정렬하려고 코드를 수정했다.
(왜 게시물은 최신순으로 정렬해놓고 댓글은 최신순으로 정렬할 생각을 하지 않았는지 모르겠다..)
public interface CommentRepository extends JpaRepository<Comment, Long> {
// 게시물 상세조회 시 전체 댓글 조회
List<Comment> findAllByOrderByCreatedAtDesc(Board board, Pageable pageable);
코드를 수정하고 테스트를 해보는데 IllegalArgumentException과 함께 500 코드가 떴다. 에러 메세지를 읽어보니
At least 1 parameter(s) provided but only 0 parameter(s) present in query.
쿼리를 날릴 때 적어도 하나의 파라미터는 조회를 해야하는데 하나도 조회하지 않다는 의미로 받아들였다.
쿼리메서드를 선언할 때, findAllBy 뒤에 Board가 빠져 있는걸 알아챘고 붙이고 실행을 해보니 정상적으로 작동했다.
public interface CommentRepository extends JpaRepository<Comment, Long> {
// 게시물 상세조회 시 전체 댓글 조회
List<Comment> findAllByBoardOrderByCreatedAtDesc(Board board, Pageable pageable);