// TODO: // 이 로직은 비지니스 로직을 담고 있습니다. // 비즈니스 레이어로 옮기는 것이 좋습니다. private void RefreshPayment(Payment iamportPayment, Models.Payment payment) { // 기존 상태(payment.State)와 최신 상태(iamportPayment.Status)를 비교합니다. switch (iamportPayment.Status) { case PaymentStatus.Ready: if (iamportPayment.Method == PaymentMethod.VirtualBank && !string.IsNullOrEmpty(iamportPayment.VirtualBankAccount)) { payment.SetAwatingForVirtualBank( iamportPayment.IamportId, iamportPayment.PaymentGatewayTransactionId, iamportPayment.VirtualBankName, iamportPayment.VirtualBankAccount, iamportPayment.VirtualBankAccountHolder); } else { payment.SetInProgress(iamportPayment.IamportId); } break; case PaymentStatus.Paid: switch (iamportPayment.Method) { case PaymentMethod.CreditCard: payment.SetPaidForCreditCard( iamportPayment.IamportId, iamportPayment.PaidAtUtc, iamportPayment.PaymentGatewayTransactionId, iamportPayment.ApplyNumber, iamportPayment.CreditCardCompanyName, iamportPayment.InstallmentPlanPeriod); break; case PaymentMethod.VirtualBank: payment.SetPaiedForVirtualBank( iamportPayment.IamportId, iamportPayment.PaidAtUtc, iamportPayment.PaymentGatewayTransactionId, iamportPayment.VirtualBankName, iamportPayment.VirtualBankAccount, iamportPayment.VirtualBankAccountHolder); break; case PaymentMethod.Transfer: case PaymentMethod.Mobile: case PaymentMethod.CultureLand: case PaymentMethod.SmartCulture: case PaymentMethod.HappyMoney: default: payment.SetPaidForOthers( iamportPayment.IamportId, iamportPayment.PaidAtUtc, iamportPayment.PaymentGatewayTransactionId); break; } break; case PaymentStatus.Cancelled: payment.SetCancelled( iamportPayment.IamportId, iamportPayment.CancelledAtUtc, iamportPayment.CancelledReason, iamportPayment.CancelledAmount); break; case PaymentStatus.Failed: payment.SetFailed( iamportPayment.IamportId, iamportPayment.FailedAtUtc, iamportPayment.FailedReason); break; default: break; } paymentRepository.Update(payment); }
// TODO: // 이 로직은 비지니스 로직을 담고 있습니다. // 비즈니스 레이어로 옮기는 것이 좋습니다. private async Task RefreshPaymentAsync(Models.Payment payment) { var iamportPayment = await paymentsApi.GetByTransactionIdAsync(payment.TransactionId); if (iamportPayment == null) { throw new InvalidOperationException("Failed to get payment information from Iamport."); } // 기존 상태(payment.State)와 최신 상태(iamportPayment.Status)를 비교합니다. switch (iamportPayment.Status) { case PaymentStatus.Ready: if (iamportPayment.Method == PaymentMethod.VirtualBank && !string.IsNullOrEmpty(iamportPayment.VirtualBankAccount)) { payment.SetAwatingForVirtualBank( iamportPayment.IamportId, iamportPayment.PaymentGatewayTransactionId, iamportPayment.VirtualBankName, iamportPayment.VirtualBankAccount, iamportPayment.VirtualBankAccountHolder); } else { payment.SetInProgress(iamportPayment.IamportId); } break; case PaymentStatus.Paid: switch (iamportPayment.Method) { case PaymentMethod.CreditCard: payment.SetPaidForCreditCard( iamportPayment.IamportId, iamportPayment.PaidAtUtc, iamportPayment.PaymentGatewayTransactionId, iamportPayment.ApplyNumber, iamportPayment.CreditCardCompanyName, iamportPayment.InstallmentPlanPeriod); break; case PaymentMethod.VirtualBank: payment.SetPaiedForVirtualBank( iamportPayment.IamportId, iamportPayment.PaidAtUtc, iamportPayment.PaymentGatewayTransactionId, iamportPayment.VirtualBankName, iamportPayment.VirtualBankAccount, iamportPayment.VirtualBankAccountHolder); break; case PaymentMethod.Transfer: case PaymentMethod.Mobile: case PaymentMethod.CultureLand: case PaymentMethod.SmartCulture: case PaymentMethod.HappyMoney: default: payment.SetPaidForOthers( iamportPayment.IamportId, iamportPayment.PaidAtUtc, iamportPayment.PaymentGatewayTransactionId); break; } break; case PaymentStatus.Cancelled: payment.SetCancelled( iamportPayment.IamportId, iamportPayment.CancelledAtUtc, iamportPayment.CancelledReason, iamportPayment.CancelledAmount); break; case PaymentStatus.Failed: payment.SetFailed( iamportPayment.IamportId, iamportPayment.FailedAtUtc, iamportPayment.FailedReason); break; default: break; } paymentRepository.Update(payment); }