22.07.05 TIL + JPA 연관관계 메소드

Wintering·2022년 7월 5일
1

2022TIL

목록 보기
62/87

7월5일(화)

내일배움캠프 D+79🐹

  • 사이트에 대한 구성과 흐름? 그에 따른 코드의 진행 등을 이제 파악하고 짤 수 있어서 짜는 도중 이렇게 하는 게 맞을까 이게 의미가 있나..? 이게 맞다고..? 하는 생각이 들어서 튜터님께 이게 괜찮은지 여쭤보았는데 좋지 않은 코드다! 라는 피드백을 들었다! 막연하게 이거 아닌 거 같은데.. 라는 생각만 하던 것에 대해서 확실한 아님을 깨달았기 때문에 오늘의 TIL로 정리해본다!
  • userService ( 수정 전 )
 @Transactional
    public void approveIsPass(Long id) {
        HostUser hostUser = hostUserRepository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException(USER_NOT_FOUND.getMessage()));
        hostUser.updateApprove(ApproveType.PASS);

        User user = userRepository.findById(hostUser.getId())
                .orElseThrow(() -> new IllegalArgumentException(USER_NOT_FOUND.getMessage()));
        user.updateRole(RoleType.HOST);
    }

Host 가입 여부에 따라, 유저의 권한을 NORMAL에서 HOST로 바꿔주고 호스트유저에 대해서는 신청한 가입에 대한 승인여부를 어드민페이지에 나타내는 역할을 나타내고 싶음.

  • 잘못된 점
    • User와 HostUser는 OneToOne으로 매핑관계가 맺어져있다.
      UserRepository와 HostUserRepository 두 가지를 각각 부를 필요없이 UserRepository에서 접근하는 편이 좋다.
    • updateRole과 updateApprove가 나눠져있기도 하고, 한눈에 명시적으로 무슨일을 하고 있는지 알 수 없다.
      위에 써져있는, 신청한 가입에 대한 승인여부를 나타내주고 싶다! 라는 목적에 맞게, 메소드 명을 만들어주고 updateRole과 updateApprove를 합친 연관관계 메소드를 만들어주는 편이 좋음
    • 현재 코드는 Long id로 hostUser의 pk를 받아오고 있지만, User에서 연관관계에 대한 메소드를 만들어주는 편이 좋으므로, Long id로 user_number값을 받아오는 게 좋다
  • UserService (수정 후)
    @Transactional
    public void approveIsPass(Long id) {
        User user = userRepository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException(USER_NOT_FOUND.getMessage()));
        user.updateNormalUserToHostUser(user);
    }

2개의 댓글

comment-user-thumbnail
2022년 7월 5일

👍👍👍👍👍👍👍👍 예지님이 있어서 너무 든든합니다 👍👍👍👍👍👍👍👍👍

답글 달기
comment-user-thumbnail
2022년 7월 6일

꺠약 확실하게 좋은 코드 너무 잘했네요ㅎㅎ 앞으로도 홧팅

답글 달기