Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.PositiveOrZero;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.*;

import java.math.BigDecimal;

@Getter
@Builder
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class GetMerchantUidRequest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
@Getter
@RequiredArgsConstructor
public enum PaymentStatus {
PAID, PENDING, CANCELED;
PAID, PENDING, CANCELED, REFUNDED;
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public enum TradeException implements BaseException {
GIFTICON_NOT_FOUND(HttpStatus.NOT_FOUND, 3039, "신고하려는 게시글이 기프티콘이 아닙니다."),
BARCODE_NOT_VIEWED(HttpStatus.BAD_REQUEST, 3040, "바코드를 조회하지 않은 기프티콘은 신고할 수 없습니다."),
SOLD_POST_ALREADY(HttpStatus.BAD_REQUEST, 3041, "이미 판매 완료된 게시글입니다."),
REFUND_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, 3042, "환불에 실패했습니다.")
;

private final HttpStatus httpStatus;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ private void cancelPayment(final String impUid) {
}
catch (IamportResponseException | IOException e){
log.error("impUid {}에 대한 결제 환불에 실패했습니다. :", impUid, e);
throw new GeneralException(TradeException.PAYMENT_FAILED);
throw new GeneralException(TradeException.REFUND_FAILED);
}
}

Expand All @@ -131,30 +131,34 @@ public GetValidatePaymentResponse validateIamport(final String impUid, final Lon
final Post post = postRepository.findByIdWithLock(postId)
.orElseThrow(() -> new GeneralException(TradeException.POST_NOT_FOUND));

final Payment payment = paymentRepository.findByMerchantUid(portOnePayment.getResponse().getMerchantUid())
.orElseThrow(() -> new GeneralException(TradeException.PAYMENT_NOT_FOUND));

if (post.getIsDeleted()) {
cancelPayment(impUid);
payment.updatePaymentStatus(PaymentStatus.REFUNDED);
throw new GeneralException(TradeException.DELETED_POST_ACCESS_DENIED);
}

if (post.getIsSold()) {
cancelPayment(impUid);
payment.updatePaymentStatus(PaymentStatus.REFUNDED);
throw new GeneralException(TradeException.PAYMENT_DUPLICATE);
}

if (Objects.equals(post.getSeller().getId(), user.getId())) {
throw new GeneralException(TradeException.SELF_PAYMENT_DENIED);
}

final Payment payment = paymentRepository.findByMerchantUid(portOnePayment.getResponse().getMerchantUid())
.orElseThrow(() -> new GeneralException(TradeException.PAYMENT_NOT_FOUND));

if (payment.getAmount().compareTo(portOnePayment.getResponse().getAmount()) != 0) {
cancelPayment(impUid);
payment.updatePaymentStatus(PaymentStatus.REFUNDED);
throw new GeneralException(TradeException.PAYMENT_AMOUNT_MISMATCH);
}

if (payment.getUseCoin().intValue() > user.getCoin()) {
cancelPayment(impUid);
payment.updatePaymentStatus(PaymentStatus.REFUNDED);
throw new GeneralException(TradeException.COIN_NOT_ENOUGH);
}

Expand Down
Loading