Skip to content

Conversation

@sapiens2000
Copy link
Collaborator

@sapiens2000 sapiens2000 commented Apr 2, 2025

📌 PR 제목

프로필 기능 구현 앞서 팔로우 기능 간단 구현

✨ 변경 사항

  • 팔로우 추가, 삭제 로직 추가
  • 팔로우 수, 팔로잉 수 조회 로직 추가
  • 통합 테스트 케이스 추가

🔍 변경 이유

프로필 조회하면서 팔로워, 팔로잉 수가 필요해서 프로필 구현에 앞서 간단하게 구현해두었습니다.

✅ 체크리스트

  • 코드가 정상적으로 동작하는지 확인
  • 관련 테스트 코드 작성 및 통과 여부 확인
  • 리뷰어가 알아야 할 사항 추가 설명

📌 참고 사항

count 쿼리가 프로필 조회할때 필요해서 간단히 구현했습니다. 데이터가 얼마없는 초기에는 성능이 나쁘지 않아서
나중에 데이터 쌓이면 개선할 예정입니다.

@github-actions
Copy link

github-actions bot commented Apr 2, 2025

Claude의 전체 변경사항 및 관련 파일에 대한 리뷰:

개선된 사항:

  • Follow 엔티티와 관련 로직의 리팩토링으로 코드의 일관성과 가독성이 향상되었습니다.
  • 팔로우 기능에 대한 통합 테스트가 추가되어 기능의 신뢰성이 개선되었습니다.
  • UserFixture에 다양한 사용자 생성 메서드가 추가되어 테스트 코드의 유연성이 증가했습니다.

주요 이슈:

  1. DiaryService의 접근 권한 검증 로직 개선 필요

    • 제안: validateDiaryAccess 메서드를 분리하여 재사용성을 높이고, 복잡성을 줄이세요.
    private void validateDiaryAccess(Diary diary, Long userId) {
        if (diary.isOwner(userId)) return;
        if (diary.getVisibility() == VisibilityType.PUBLIC) return;
        if (diary.getVisibility() == VisibilityType.FOLLOWER 
            && followRepository.existsByInitiatorIdAndTargetId(userId, diary.getUserId())) return;
        throw new NotFoundDiaryException();
    }
  2. FollowService의 예외 처리 개선

    • 제안: 사용자 정의 예외를 사용하여 더 명확한 에러 메시지를 제공하세요.
    public void createFollow(Long initiatorId, String targetNickname) {
        User target = userRepository.findByNickname(targetNickname)
            .orElseThrow(() -> new UserNotFoundException("Target user not found: " + targetNickname));
        if (followRepository.existsByInitiatorIdAndTargetId(initiatorId, target.getUserId())) {
            throw new DuplicateFollowException("Already following this user");
        }
        followRepository.save(Follow.of(initiatorId, target.getUserId()));
    }
  3. UserController의 중복 코드 제거

    • 제안: 공통 로직을 별도의 메서드로 추출하여 코드 중복을 줄이세요.
    private ResponseEntity<UserProfileResponseDto> getUserProfileResponse(Long userId) {
        UserProfileResponseDto userProfileResponseDto = userService.getUserProfile(userId);
        return ResponseEntity.ok(userProfileResponseDto);
    }

관련 파일에 대한 영향 분석:

  • DiaryService의 변경으로 LikeService, CommentService 등 다이어리 관련 서비스들의 접근 권한 로직을 일관성 있게 수정해야 할 수 있습니다.
  • FollowRepository의 메서드명 변경으로 인해 UserService, DiaryService 등에서 해당 메서드를 사용하는 부분을 모두 수정해야 합니다.
  • UserFixture의 변경으로 인해 여러 테스트 클래스에서 사용자 생성 로직을 수정해야 할 수 있습니다.

전반적인 의견:
코드 구조와 명명 규칙이 개선되었으며, 새로운 기능 추가와 함께 테스트 coverage도 향상되었습니다. 다만, 일부 중복 코드와 복잡한 로직에 대한 추가적인 리팩토링이 필요해 보입니다.

jwt 관련 변수 주입
secret 변수 이름 수정
secret 변수 이름 수정
secret 변수 이름 수정
@sonarqubecloud
Copy link

sonarqubecloud bot commented Apr 3, 2025

@sapiens2000 sapiens2000 merged commit 7893de3 into develop Apr 3, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants