Skip to content

[Feature] 일반 회원(Customer) Refund 생성/조회 구현#179

Merged
willjsw merged 8 commits into
developfrom
feature/#164-refund-register-get-api
Oct 27, 2025
Merged

[Feature] 일반 회원(Customer) Refund 생성/조회 구현#179
willjsw merged 8 commits into
developfrom
feature/#164-refund-register-get-api

Conversation

@willjsw

@willjsw willjsw commented Oct 23, 2025

Copy link
Copy Markdown
Collaborator

🛠️ Issue Number

closes #164

📌 작업 내용 및 특이사항

  • Customer의 환불 신청/환불 상세 조회 구현

Refund 신청(생성)

  • 주문 1건 당 환불 1 건만 생성되도록 검증 로직 구현
  • 환불 금액 = 주문에 대한 결제 총액(Payment.amount)

Refund 상세 조회

  • DeliveryAddress 응답 필드 타입으로 그대로 사용 시 Order > DeliveryAddress 접근 과정에서 추가 쿼리 발생
  • Order 조회 메서드 분리(일반 조회/DeliveryAddress fetch join을 통한 일괄 조회)
  • DeliveryAddress 도메인 생성 시 추가 접근 없도록 일괄 조회로 처리

📚 참고사항

  • Order 도메인의 OrderNum 필드 String 타입 변환 필요
  • 응답 필드 중 refundNumber -> refundId 로 변경
  • DeliveryAddress 필드 개별 삽입으로 인한 API 명세 변경 필요
  • productImageUrl 응답 필드에서 삭제
  • 도메인 엔티티 필드명 케이스 snake_case -> camelCase 수정 필요 @Moses249
image
  • Refund, RefundRepository, OrderRepository, OrderDetailRepository, RefundErrorCode, OrderErrorCode 충돌 예상(동시 수정)
  • @Moses249 현재 작업 진행중인 부분 PR develop 머지 이후 반영 예정

@willjsw willjsw added this to the Sprint 2 milestone Oct 23, 2025
@willjsw willjsw self-assigned this Oct 23, 2025
@willjsw willjsw added the ✨ feature 새 기능을 추가합니다. label Oct 23, 2025
@willjsw
willjsw requested review from Moses249 and hyeonji91 October 24, 2025 04:14
@isak-kang

Copy link
Copy Markdown
Contributor

고생하셨습니다.
Q : 다만 지금 주문(상점) 1건 당 환불 1건만 생성되고 있는데 주문상세(상품)하나 당 환불을 하고 싶을 때는 어떻게 할껀지에 대해 다같이 이야기를 나눠봐야 할 것 같습니다!!! 고생하셨스비당

orderDetail.getOrderDetailId(),
orderDetail.getPrice(),
orderDetail.getProductName(),
orderDetail.getOptionName(),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1: 현재 OptionName , Optiontitle / Productprice, Price 의 이름이 혼용되고 있는데 하나로 통일시키시는건 어떨까요?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

해당 부분은 Order에 선언된 필드를 기반으로 @Getter가 자동으로 만들어주는 것이기 때문에, 네이밍 컨벤션에 대한 논의가 선행되어야 할 듯 합니다!

@Bal1oon Bal1oon left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

고생하셨습니다! 우선 P1 리뷰에 해당하는 부분들 수정해주시고, 다른 코멘트들 참고해주시면 감사하겠습니다.

추가로 Refund가 Order와 매핑되어 있는데, Payment와 연결되어야 하지 않을까 싶어서 한 번 생각해봐주세요. 디코로 간단하게 회의해도 괜찮을 거 같습니다.

Comment on lines +35 to +44
// Customer
public void createRefund(UUID orderId, RefundCreateRequest request) {
assertNoRefundExistsByOrder(orderId);
Order order = getValidOrder(orderId);
refundRepository.save(
Refund.create(
request.reason(),
request.description(),
order.getPayment().getAmount())); // Payment 도메인 Getter 삽입 필요
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2: 현재 상태에서는 결제가 완료된 주문에 대해서 환불이 진행되는지에 대한 검증이 없는 거 같아, 결제된 주문인지 검증하는 로직이 추가되어야 할 거 같습니다.

@willjsw willjsw Oct 25, 2025

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

현재 주문에 대한 취소가 가능한 상황은 배송을 기준으로, 배송이 시작되기 전인 것으로 알고 있는데(모든 상품이 준비중, 아직 발송된 상품 X 상태),
OrderStatus 기준 PREPARING 일 때만 취소가 가능한 것으로 처리하면 될까요?
@hyeonji91

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

넵 맞습니다!

@willjsw

willjsw commented Oct 25, 2025

Copy link
Copy Markdown
Collaborator Author

고생하셨습니다! 우선 P1 리뷰에 해당하는 부분들 수정해주시고, 다른 코멘트들 참고해주시면 감사하겠습니다.

추가로 Refund가 Order와 매핑되어 있는데, Payment와 연결되어야 하지 않을까 싶어서 한 번 생각해봐주세요. 디코로 간단하게 회의해도 괜찮을 거 같습니다.

코드 통합 과정에서 발생한 단순 오류(Entity단 메서드 네이밍, JPQL 쿼리문 스페이스 누락)는 모두 찾아 수정하였고,
배송상태에 따라 Refund 생성을 방지하는 검증 로직(Preparing 일 때만 가능하도록) 추가했습니다.
조회 성능 최적화(OrderRepository Payment Fetch) , 코드 리팩토링(Refund 도메인 create() 메서드 파라미터 구조) 등 일부 추가적인 수정사항도 있으니 확인 부탁드립니다:)

현재는 이전 상태가 어떻든 request의 상태값으로 변경할 수 있는데, 이전 상태가 무엇인지에 따라 변경을 제어하는 것을 추가하면 어떨지 의견드려요.

해당 부분은 필요한 로직이라고 생각되는데, @Moses249 님과 상의해서 월요일까지 반영해보도록 하겠습니다:) 감사합니다!

@Bal1oon Bal1oon left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

고생하셨습니다 👍

빌드 실패가 일어나는데, 다른 브랜치와 충돌을 피하기 위해
실패 지점 수정하고 있지 않고 계신건가요?

@willjsw

willjsw commented Oct 25, 2025

Copy link
Copy Markdown
Collaborator Author

고생하셨습니다 👍

빌드 실패가 일어나는데, 다른 브랜치와 충돌을 피하기 위해 실패 지점 수정하고 있지 않고 계신건가요?

현재 Payment 쪽 작업사항이 아직 PR 승인 전이라, create 메서드에서 payment의 결제금액(Amount)을 참조하는 부분에서 symbol not found 발생할 것 같습니다.
image

우선 머지 보류 해두고, status 변경 쪽 리뷰 사항 먼저 반영하는게 좋을 듯 합니다!
#187 develop에 머지되고 Payment 참조 가능해지면 검토 후에 합치도록 하겠습니다:)

@willjsw

willjsw commented Oct 27, 2025

Copy link
Copy Markdown
Collaborator Author

@Moses249 API 테스트 작성위해 현재 상태로 머지하겠습니다! 앞서 리뷰하면서 수정 요청드렸던 부분 별도 PR로 진행 부탁드립니다!

우선 머지 보류 해두고, status 변경 쪽 리뷰 사항 먼저 반영하는게 좋을 듯 합니다! #187 develop에 머지되고 Payment 참조 가능해지면 검토 후에 합치도록 하겠습니다:)

@willjsw
willjsw merged commit 68d1493 into develop Oct 27, 2025
1 check passed
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.

[Feature] 환불 신청/환불 상세 조회 API 구현

5 participants