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

feat(profile): 프로필 기능 구현 #30

Merged
merged 10 commits into from
Jan 3, 2024
Merged

feat(profile): 프로필 기능 구현 #30

merged 10 commits into from
Jan 3, 2024

Conversation

jacobhboy
Copy link
Member

@jacobhboy jacobhboy commented Jan 2, 2024

🎫 관련 이슈

close #27


📄 개요

  • 프로필 수정 기능 구현
  • 프로필 List 조회 구현
  • 프로필 조회 필터링 구현
  • 프로필 상세 조회 구현

🏁 확인 사항

  • 테스트를 완료했나요?
  • API 문서를 작성했나요?
  • 코드 컨벤션을 준수했나요?
  • 불필요한 로그, 주석, import 등을 삭제했나요?

🙋🏻 덧붙일 말

비즈니스의 흐름을 파악하기 쉬운지, 더 좋은 어노테이션이나 방법이 없는지, 발생할 수 있는 문제는 없는지, QueryDSL로 동적쿼리 만든 부분은 괜찮은지를 집중적으로 리뷰해주셨으면 합니다!

@jacobhboy jacobhboy linked an issue Jan 2, 2024 that may be closed by this pull request
5 tasks
@jacobhboy jacobhboy changed the title feat(profile): 프로필 기반 기능 구현 feat(profile): 프로필\ 기능 구현 Jan 2, 2024
@jacobhboy jacobhboy changed the title feat(profile): 프로필\ 기능 구현 feat(profile): 프로필 기능 구현 Jan 2, 2024
Copy link
Contributor

@Woongbin06 Woongbin06 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 +41 to +44
private BooleanExpression majorFilter(List<Major> majors) {
if (majors == null) {
return null;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

List의 null 여부를 검사할 때 List.isEmpty()를 사용하는게 어떨까요??

Copy link
Member Author

Choose a reason for hiding this comment

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

list에 아무것도 넣지 않은 경우는 null이 들어와서 isEmpty 검사를 하면 NPE가 발생하더라구요. 그래서 저렇게 했습니다!

Comment on lines 45 to 47
@PutMapping
@ResponseStatus(HttpStatus.CREATED)
public void update(@Valid @RequestBody ProfileUpdateRequest requestDto) {
Copy link
Contributor

Choose a reason for hiding this comment

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

update를 하는 로직이니깐 CREATED보다는 NO_CONTENT가 낫지 않을까요??

Copy link
Member Author

Choose a reason for hiding this comment

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

맞네요~ 감사합니다

Comment on lines 63 to 67
@GetMapping("/{profileId}")
@ResponseStatus(HttpStatus.OK)
public ProfileResponse readOne(@PathVariable(name = "profileId") Long profileId) {
return ProfileResponse.from(queryService.readOne(profileId));
}
Copy link
Contributor

Choose a reason for hiding this comment

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

URL에서 공백을 대문자로 구분하기 보다는 -을 사용하게 더 좋아보여요!!

Comment on lines +15 to +25
public static ProfileResponse from(Profile profile) {
return new ProfileResponse(
profile.getWriter().getId(),
profile.getWriter().getName(),
profile.getInformation().getImageUrl(),
profile.getInformation().getMajor(),
profile.getOnlineProfile().getGithubUrl(),
profile.getOnlineProfile().getResume(),
profile.getOnlineProfile().getPortfolio()
);
}
Copy link
Contributor

Choose a reason for hiding this comment

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

저는 DTO에서도 생성자의 매걔변수가 많을 때는 빌더 패턴을 주로 사용하는 데 창보님을 어떻게 생각하시나요?

Copy link
Member Author

Choose a reason for hiding this comment

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

저는 Builder 패턴을 좋아하지 않아요. builder는 값을 빼먹을 가능성이 너무 높다고 느껴져요. 그래서 저는 값을 강제하는 생성자를 선호합니다

Comment on lines +9 to +15
public ProfileNotFoundException(User writer) {
super(HttpStatus.NOT_FOUND, String.format("%s이 생성한 profile이 없습니다.", writer.getId()));
}

public ProfileNotFoundException(Long id) {
super(HttpStatus.NOT_FOUND, String.format("%s의 아이디를 가진 profile이 없습니다.", id));
}
Copy link
Contributor

Choose a reason for hiding this comment

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

예외에서 매걔변수를 받아 같이 처리하는 방법이 되게 좋은 거 같아요!!

Comment on lines 11 to 12
public interface ProfileRepository extends JpaRepository<Profile, Long> {
boolean existsProfileByWriter(User writer);
Copy link
Contributor

Choose a reason for hiding this comment

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

여기서 ProfileQueryRepository까지 다중 상속 받아 사용할 때 ProfileRepository만 선언하여 쓰는 게 가독성 면에서 좋을 거 같아요.

Copy link
Member Author

Choose a reason for hiding this comment

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

저도 그게 좋다고 생각을 했는데, ProfileRepository가 ProfileQueryRepository의 함수까지 읽어서 자동으로 쿼리를 생성하려고 하더라구요... 아마 새로 생긴 기능인 것 같습니다. 그래서 이렇게 가야할 것 같아요...😿
스크린샷 2024-01-03 오후 3 30 16

Copy link
Contributor

@Woongbin06 Woongbin06 Jan 3, 2024

Choose a reason for hiding this comment

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

아이고... 네이밍을 조금 바꾸면 되지 않을까요??

@jacobhboy jacobhboy requested a review from Woongbin06 January 3, 2024 06:45
@jacobhboy jacobhboy merged commit dbd2a70 into master Jan 3, 2024
2 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