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

SAPHY-55 feat: 상품 구매 현황 조회 기능 구현 #90

Merged
merged 4 commits into from
Oct 5, 2024

Conversation

gyuseon25
Copy link
Member

@gyuseon25 gyuseon25 commented Oct 4, 2024

📄 Summary

사용자의 전체 구매현황 목록 조회,
상태에 맞는 구매현황 목록 조회,
구매현황 단건 조회 기능 구현했습니다.

🕰️ Actual Time of Completion

1시간 30분

🙋🏻 More

상태에 맞는 구매현황 목록 조회할 때, String 타입으로 상태 받아서 그걸 enum 타입으로 바꾸는 방식으로 진행했습니다.
여기서 정의되지 않은 상태가 들어왔을시, 예외를 발생시키게 해놓긴 했는데, 뭔가 더 좋은 방법이 있을것만 같은데 생각이 나지 않네요 ㅎㅎㅎ..
많은 의견 부탁드립니다 !@!

@gyuseon25 gyuseon25 added the ✨ Feature 새로운 기능 label Oct 4, 2024
@gyuseon25 gyuseon25 self-assigned this Oct 4, 2024
Copy link
Contributor

@holyPigeon holyPigeon 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 +37 to +45
@GetMapping("/{purchaseId}")
@Operation(summary = "구매 현황 단건 조회 API", description = "사용자의 구매 현황을 단건으로 조회하는 API 입니다.")
public ApiResponse<PurchaseResponse> findById(
@AuthenticationPrincipal CustomUserDetails customUserDetails,
@PathVariable Long purchaseId
) {
Member loggedInmember = customUserDetails.getMember();
return new ApiResponse<>(purchaseService.findById(loggedInmember, purchaseId));
}
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 +26 to +32
public static PurchaseStatus findByName(String name) {
try {
return PurchaseStatus.valueOf(name.toUpperCase());
} catch (IllegalArgumentException e) {
throw SaphyException.from(ErrorCode.PURCHASE_STATUS_NOT_FOUND);
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

좀 더 명시적으로 적으려면 아래처럼 적을 수도 있긴 한데

public static PurchaseStatus findByName(String name) {
    return Arrays.stream(PurchaseStatus.values())
            .filter(status -> status.name().equalsIgnoreCase(name))
            .findFirst()
            .orElseThrow(() -> SaphyException.from(ErrorCode.PURCHASE_STATUS_NOT_FOUND));
}

근데 굳이 이미 구현된 valueOf() 메서드를 안 쓰고 이런 식으로 코드를 늘리는 게 별로 좋아보이진 않는 듯 ㅋㅋㅋㅋㅋ 걍 지금 코드 그대로 가도 괜찮을 것 같긴 함

Copy link
Member Author

Choose a reason for hiding this comment

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

오호 참고해보겠습니다

Copy link
Member

Choose a reason for hiding this comment

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

equalsIgnoreCase로 대소문자 구분 없이 enum 타입 체크하는 방식 좋은 거 같습니다~! 그리고 findFirst()로 null 대신 Optional.empty() 반환하는 방식도 좋은 거 같습니다!(혹시 이거 클린 코드 7장에서 보신건지?!)

Copy link
Contributor

Choose a reason for hiding this comment

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

지피티가 알려주긴 했습니다;; ㅋㅋㅋㅋㅋㅋㅋ

Copy link
Member

@MinSang22Kim MinSang22Kim left a comment

Choose a reason for hiding this comment

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

고생하셨습니다~!

@@ -37,7 +37,15 @@ public List<PurchaseResponse> findAll(Member member) {
.toList();
}

public List<PurchaseResponse> findByStatus(Member member, String status) {
Copy link
Member

Choose a reason for hiding this comment

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

저희 서비스가 status관련 enum이 많아서 purchaseStatus라고 명시적으로 적어주면 더 좋을 거 같아요:)
+메서드도요!

@@ -37,7 +37,15 @@ public List<PurchaseResponse> findAll(Member member) {
.toList();
}

public List<PurchaseResponse> findByStatus(Member member, String status) {
PurchaseStatus purchaseStatus = PurchaseStatus.findByName(status); // 여기에 오류 발생시키긴 했는데, 뭔가 더 좋은 방법 있을거 같습니다..
Copy link
Member

Choose a reason for hiding this comment

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

음.. 일단 여러가지 고민이 들었을 거 같네요. 제 생각도 한번 아래에 정리해볼게요!

  1. 우선 PurchaseStatus에 대해 Enum타입으로 받을지 String으로 받을지에 대한 고민

String(현재 방식)으로 받아서 예외처리하는 것이 더 좋아보입니다!
지금 저희 코드들도 대부분 이 방식을 따라왔고 유연성이나 예외처리 확장성 측면에서도 이 방법이 좋은 거 같습니다!

  1. 예외처리를 어느 계층에서 해야할 것인지에 대한 고민

예외처리를 service와 enum 중에서 어디서 할 것인지에 대한 고민 같은데, enum으로 변환하는 과정에서의 오류니까 해당 부분에 두는 현재 방식도 좋아보입니다~!

Comment on lines +26 to +32
public static PurchaseStatus findByName(String name) {
try {
return PurchaseStatus.valueOf(name.toUpperCase());
} catch (IllegalArgumentException e) {
throw SaphyException.from(ErrorCode.PURCHASE_STATUS_NOT_FOUND);
}
}
Copy link
Member

Choose a reason for hiding this comment

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

equalsIgnoreCase로 대소문자 구분 없이 enum 타입 체크하는 방식 좋은 거 같습니다~! 그리고 findFirst()로 null 대신 Optional.empty() 반환하는 방식도 좋은 거 같습니다!(혹시 이거 클린 코드 7장에서 보신건지?!)

@MinSang22Kim MinSang22Kim merged commit 62f05b1 into develop Oct 5, 2024
1 check passed
@holyPigeon holyPigeon deleted the feat/SAPHY-55-상품구매현황-조회 branch October 5, 2024 07:52
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.

3 participants