Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] TalkRoom 단건 조회 API 구현 #35

Merged
merged 2 commits into from
Mar 25, 2024

Conversation

AHNYUNKI
Copy link
Member

💡 연관된 이슈

close #33

📝 작업 내용

  • TalkRoom 단건 조회 API 구현
  • TalkRoom 단건 조회 API 테스트 코드 작성

💬 리뷰 요구 사항

Query 동작 방식

  1. 먼저 프론트 단에서 넘어온 TalkRoom_ID 값을 가지고 해당 TalkRoomJOINuser, book 정보를 가져옵니다.
  2. 그 다음으로 해당 ID 값으로 TalkRoomRoleJOIN을 한 TalkRoom 정보를 가지고 TalkRoomRole.Status을 가지고 옵니다.
  3. 두 번째와 마찬가지로 Comment 정보도 가져온 뒤 TalkRoomFindOneResponse에 넣고 반환해줍니다.

첫 번째 동작 방식 코드

private TalkRoomFindOneResponse findTalkRoomByTalkRoomId(Long talkRoomId) {
        return queryFactory.select(new QTalkRoomFindOneResponse(
                        talkRoom.id.as("talkRoomId"),
                        user.name.as("userName"),
                        talkRoom.title,
                        talkRoom.content,
                        book.title,
                        book.imageUrl.as("bookImage")
                ))
                .from(talkRoom)
                .join(talkRoom.user, user)
                .join(talkRoom.book, book)
                .where(talkRoom.id.eq(talkRoomId))
                .fetchOne();
    }

두 번째 동작 방식 코드

    private List<TalkRoomQueryReadingStatus> findTalkRoomRoleByTalkRoomId(Long talkRoomId) {
        return queryFactory.select(new QTalkRoomQueryReadingStatus(
                        talkRoom.id,
                        talkRoomRole.readingStatus
                ))
                .from(talkRoomRole)
                .join(talkRoomRole.talkRoom, talkRoom)
                .where(talkRoomRole.talkRoom.id.eq(talkRoomId))
                .fetch();
    }

세 번째 동작 방식 코드

    private List<TalkRoomQueryComments> findCommentsByTalkRoomId(Long talkRoomId) {
        return queryFactory.select(new QTalkRoomQueryComments(
                        comment.id.as("commentId"),
                        user.name.as("userName"),
                        comment.content
                ))
                .from(comment)
                .join(comment.talkRoom, talkRoom)
                .join(comment.user, user)
                .where(comment.talkRoom.id.eq(talkRoomId))
                .fetch();
    }

최종 Repository 코드

    @Override
    public TalkRoomFindOneResponse findOneTalkRoom(Long talkRoomId) {
        // 첫 번째 쿼리 실행
        TalkRoomFindOneResponse findOneTalkRoom = findTalkRoomByTalkRoomId(talkRoomId);

        // 두 번째 쿼리 실행
        List<TalkRoomQueryReadingStatus> talkRoomRoles = findTalkRoomRoleByTalkRoomId(talkRoomId);
        findOneTalkRoom.addTalkRoomStatus(talkRoomRoles);

        // 세 번째 쿼리 실행
        List<TalkRoomQueryComments> talkRoomComments = findCommentsByTalkRoomId(talkRoomId);
        findOneTalkRoom.addTalkRoomComments(talkRoomComments);

        return findOneTalkRoom;
    }

@AHNYUNKI AHNYUNKI linked an issue Mar 25, 2024 that may be closed by this pull request
2 tasks
@AHNYUNKI AHNYUNKI requested review from pdohyung and jwooo March 25, 2024 07:51
@AHNYUNKI AHNYUNKI self-assigned this Mar 25, 2024
@AHNYUNKI AHNYUNKI added the ✨ Feature 기능 개발 label Mar 25, 2024
Copy link
Member

@pdohyung pdohyung left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다. 👍
궁금한 사항 질문 남겼으니 답변 주시고 머지하시면 될 듯합니다 ~

Comment on lines +7 to +11
@DataJpaTest
@Import(QueryDslConfig.class)
public abstract class RepositoryTestSupport {

}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

repository 테스트에 @Import(QueryDslConfig.class)를 적용하셨군요.
그래서 @DataJpaTest로 QueryDSL을 테스트 할 수 있는 건가요 ?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네네 !
@DataJpaTest 를 사용하게 되면 Bean 등록이 안되어 있어서 수동으로 등록해야 Bean에 등록이 되더라구요!

Copy link
Collaborator

@jwooo jwooo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

문제되는 부분 없는거 같아 머지 했습니다.

고생하셨습니다 👍

@AHNYUNKI AHNYUNKI merged commit 0280451 into develop Mar 25, 2024
1 check passed
@AHNYUNKI AHNYUNKI deleted the feature/33-talkroom-findOne-api branch March 25, 2024 08:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 개발
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature] TalkRoom 단건 조회 API 구현
3 participants