점프 투 스프링부트 추가기능 구현 - 프로필

박철현·2023년 7월 27일
0

점프투스프링부트

목록 보기
3/14
  • 점프투스프링부트 추가기능 구현 두번째, 프로필 입니다.

  • 이번에 브랜치를 파고 작업하는 것을 놓쳐서.. main에 바로 커밋되어.. issue에 최대한 정리했으니 참고하시면 좋을 것 같습니다.

  • Repository 코드만 포스팅 하겠습니다. 혹시 참조하실 분들은 상세 코드는 아래 이슈를 참조해주세요

  • 구현 방식

    • 프로필 페이지
    • 사용자의 기본 정보
    • 작성한 질문
    • 작성한 답변
    • 작성한 댓글 (댓글 기능 전으로 미구현, 비슷할 거라 예상)
  • 프로필 페이지

    • 사용자의 기본 정보
    • 폰트어썸 이모티콘 사용 및 제이덴티콘 사용
    • 부트스트랩 박스 사용
    • 밑에 링크에 이슈 내 디자인 개선 부분 참고해주시면 감사하겠습니다
    • 이쁘게 꾸미는걸 못해서 이정도로 저는 사실 만족합니다 ㅎㅎ..
  • 작성한 질문 보여지기 : 총 업로드 개수와 가장 최근 5개 리스트, 클릭 시 이동

    • 총 질문 개수
      • JPA countBy함수를 사용하여 마이페이지에 접속한 사용자가 쓴 개수를 가져왔습니다.
      Long countByAuthor(SiteUser author);
    • 목록 중 최근 5개의 질문
      • JPA findTop 메서드를 사용하여 5개를 가져왔습니다.
      List<Question> findTop5ByAuthorOrderByCreateDateDesc(SiteUser author);
    • 점프투스프링부트 기존 검색기능에 본인이 쓴 글인지 조건 추가
      @Query("select "
      			+ "distinct q "
      			+ "from Question q "
      			+ "left outer join SiteUser u1 on q.author=u1 "
      			+ "left outer join Answer a on a.question=q "
      			+ "left outer join SiteUser u2 on a.author=u2 "
      			+ "where "
      			+ "   (q.author.id = :authorId) "
      			+ "   and ( "
      			+ "       q.subject like %:kw% "
      			+ "       or q.content like %:kw% "
      			+ "       or a.content like %:kw% "
      			+ "       or u2.username like %:kw% "
      			+ "   )")
      		Page<Question> findAllByKeywordAndAuthorId(@Param("kw") String kw, @Param("authorId") Long authorId, Pageable pageable);
      • 기존 검색 기능에 있던 작성자 검색은 제외하였습니다.(작성자가 본인에 해당하니깐)
  • 본인이 답변한 게시글 보여지게 : 최근 5개만 보이고 전체를 볼 수 있도록

    • 네이버 지식인이 이런 구조이기에 참조하였습니다.
    • 답변 내용이 보여지며, 해당 게시글의 링크를 클릭하면 해당 답변으로 바로 이동합니다.
    • 네이버 지식인의 경우 답변을 1개만 달 수 있기에 보여지는 게시글이 중복이 아마 안될 것 같은데, 일단 같은 게시글이라도 중복이 발생합니다.
    • 답변 작성자의 원래 질문글 가져오기
      - JPQL의 경우 엔티티와 관계를 기반으로 동작함
      - 따라서 list 자체를 join에 활용
       @Query("select "
      		+ "distinct q "
      		+ "from Question q "
      		+ "left outer join SiteUser u1 on q.author = u1 "
      		+ "left outer join q.answerList a "
      		+ "left outer join SiteUser u2 on a.author = u2 "
      		+ "where "
      		+ "   (u2.id = :authorId) "
      		+ "   and ( "
      		+ "       q.subject like %:kw% "
      		+ "       or q.content like %:kw% "
      		+ "       or u1.username like %:kw% "
      		+ "       or a.content like %:kw% "
      		+ "       or u2.username like %:kw% "
      		+ "   )")
      	Page<Question> findAllByKeywordAndAndAnswer_AuthorId(@Param("kw") String kw, @Param("authorId") Long authorId, Pageable pageable);
      }

  - answerList 자체를 left조인이 포인트!
  
  ```HTML
 <a th:href="@{|/question/detail/${answer.question.id}#answer_${answer.id}|}" th:text="${answer.question.subject}"
  • #answer_${answer.id}를 추가하여 페이지 이동 시 해당 답글 앵커로 바로 이동하도록 구현
  • 상세 코드를 확인하고 싶은 분들은 Git-issue를 참조해주세요.
  • 완성 이미지
    • nav바도 중간으로 가게, 모바일 적으로 만들고 싶지만 기능 구현을 우선순위로 두고있습니다.
profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글