목표
SNS만들기 프로젝트를 진행하면서 모든 로직에 공통적으로 들어가는 부분이 있었다.
아래와 같이 token에서 추출한 userName이 존재하는지, 접속한 게시물이 존재하는지 예외처리하는 로직이였다.
해당 로직을 클래스화 해두면 게시물기능 뿐만 아니라 댓글기능, 좋아요기능 등등 sns프로젝트 전반적으로 사용할 수 있을거라고 판단하여서 ValidateService를 만들어서 로직을 분리하였다.
//유저 확인
userRepository.findByUserName(userName)
.orElseThrow(() -> new AppException(ErrorCode.USERNAME_NOT_FOUND, ErrorCode.USERNAME_NOT_FOUND.getMessage()));
//게시물 확인
postRepository.findById(postId)
.orElseThrow(() -> new AppException(ErrorCode.POST_NOT_FOUND, ErrorCode.POST_NOT_FOUND.getMessage()));
코드
- 로그인한 유저의 예외처리 후 User을 반환
- 게시물의 예외처리를 진행 후 Post를 반환
- 두가지 로직을 모두 실행한 후 User와 Post를 가지고있는 Dto로 반환
이 세가지의 경우의 수를 두고 메서드를 만들었다. User와 Post를 한번에 반환하기 위해서는 Dto가 필요하여서 따로 만들어주었다.
ValidateService
@Service
@RequiredArgsConstructor
public class ValidateService {
private final UserRepository userRepository;
private final PostRepository postRepository;
/**
* 로그인한 유저의 존재를 확인해주는 메서드
*/
public User validateUser(String userName){
return userRepository.findByUserName(userName)
.orElseThrow(() -> new AppException(ErrorCode.USERNAME_NOT_FOUND, ErrorCode.USERNAME_NOT_FOUND.getMessage()));
}
/**
* 게시물의 유무를 확인해주는 메서드
*/
public Post validatePost(Long postId){
return postRepository.findById(postId)
.orElseThrow(() -> new AppException(ErrorCode.POST_NOT_FOUND, ErrorCode.POST_NOT_FOUND.getMessage()));
}
/**
* 로그인한 유저와 게시물의 유무를 확인해주는 메서드
*/
public ValidateUserPostDto validateUserPost(String userName, Long postId){
//로그인 user 확인
User user = validateUser(userName);
//post 유무 확인
Post post = validatePost(postId);
return new ValidateUserPostDto(user, post);
}
}
ValidateUserPostDto
해당 Dto를 사용해서 User,Post를 예외처리해주고 한번에 반환할 수 있도록 하였다.
@Getter
@AllArgsConstructor
public class ValidateUserPostDto {
private User user;
private Post post;
}
사실 이게 올바른 방법인지는 모르겠다. 코드의 수는 확실히 줄어들기는 했어도 다른 Service에서 user을 가져와 쓸 때 validateUserPost.getUser() 로 User를 가져와야했다. 그렇기 때문에 다른사람이 내 코드를 볼 때 ValidateService클래스를 보고 와야한다는 가독성이 떨어지는 부작용이 생긴것같다.
이 부분에 대해서는 추후 피어리뷰를 통해 팀원들과 상의해볼 예정이다.
'프로젝트 > SNS만들기' 카테고리의 다른 글
[SNS Project] 마이피드 기능 구현 (0) | 2023.01.06 |
---|---|
[SNS Project] 좋아요 기능 - Soft Delete 리펙토링(@Modifying) (2) | 2023.01.06 |
[SNS Project] 좋아요 테스트 (0) | 2023.01.04 |
[SNS Project] 좋아요 조회 (0) | 2023.01.04 |
[SNS Project] 좋아요 기능 (0) | 2023.01.04 |