DanalCancel.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. using Domain.Entities.Members;
  4. using Domain.Entities.Payments.Danal.ValueObject;
  5. using Domain.Entities.Payments.ValueObject;
  6. namespace Domain.Entities.Payments.Danal;
  7. /// <summary>
  8. /// 다날 결제 취소 요청 + 응답 통합
  9. /// 전체 취소 / 부분 취소 모두 지원
  10. /// </summary>
  11. public class DanalCancel
  12. {
  13. [ForeignKey(nameof(MemberID))]
  14. public virtual Member? Member { get; private set; }
  15. [ForeignKey(nameof(PaymentOrderID))]
  16. public virtual PaymentOrder? PaymentOrder { get; private set; }
  17. [Key]
  18. public int ID { get; private set; }
  19. public int MemberID { get; private set; }
  20. public int PaymentOrderID { get; private set; }
  21. public PaymentMethod Method { get; private set; }
  22. /// <summary>원거래 번호</summary>
  23. public string TransactionID { get; private set; } = default!;
  24. /// <summary>가맹점 주문번호</summary>
  25. public string OrderID { get; private set; } = default!;
  26. /// <summary>취소 금액</summary>
  27. public int Amount { get; private set; }
  28. /// <summary>CPID</summary>
  29. public string MerchantID { get; private set; } = default!;
  30. /// <summary>전체/부분 취소</summary>
  31. public DanalCancelType CancelType { get; private set; }
  32. /// <summary>취소 요청자 (admin / system / member)</summary>
  33. public string? CancelRequester { get; private set; }
  34. /// <summary>취소 사유</summary>
  35. public string? CancelReason { get; private set; }
  36. // ── 응답 필드 ────────────────────────────────────────────────────
  37. /// <summary>응답 코드 (0000 = 성공)</summary>
  38. public string? ResponseCode { get; private set; }
  39. /// <summary>응답 메시지</summary>
  40. public string? ResponseMessage { get; private set; }
  41. /// <summary>원거래 ID (다날 응답)</summary>
  42. public string? OriginalTransactionID { get; private set; }
  43. /// <summary>취소된 금액 (다날 응답)</summary>
  44. public int? CancelledAmount { get; private set; }
  45. /// <summary>원거래 승인일자</summary>
  46. public string? TransDate { get; private set; }
  47. /// <summary>원거래 승인시간</summary>
  48. public string? TransTime { get; private set; }
  49. /// <summary>부분취소 후 남은 금액 (Balance)</summary>
  50. public int? Balance { get; private set; }
  51. /// <summary>부분취소 후 남은 결제 잔액 (RemainedAmount)</summary>
  52. public int? RemainedAmount { get; private set; }
  53. /// <summary>승인 발생 일시</summary>
  54. public string? ApprovalDateTime { get; private set; }
  55. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  56. public DateTime? UpdatedAt { get; private set; }
  57. private DanalCancel() { }
  58. public static DanalCancel CreateRequest(
  59. int memberID,
  60. int paymentOrderID,
  61. PaymentMethod method,
  62. string transactionID,
  63. string orderID,
  64. int amount,
  65. string merchantID,
  66. DanalCancelType cancelType,
  67. string? cancelRequester = null,
  68. string? cancelReason = null
  69. ) {
  70. return new DanalCancel
  71. {
  72. MemberID = memberID,
  73. PaymentOrderID = paymentOrderID,
  74. Method = method,
  75. TransactionID = transactionID,
  76. OrderID = orderID,
  77. Amount = amount,
  78. MerchantID = merchantID,
  79. CancelType = cancelType,
  80. CancelRequester = cancelRequester,
  81. CancelReason = cancelReason
  82. };
  83. }
  84. public void SetResponse(
  85. string code, string message,
  86. string? originalTransactionID = null,
  87. int? cancelledAmount = null,
  88. string? transDate = null, string? transTime = null,
  89. int? balance = null, int? remainedAmount = null,
  90. string? approvalDateTime = null
  91. ) {
  92. ResponseCode = code;
  93. ResponseMessage = message;
  94. OriginalTransactionID = originalTransactionID;
  95. CancelledAmount = cancelledAmount;
  96. TransDate = transDate;
  97. TransTime = transTime;
  98. Balance = balance;
  99. RemainedAmount = remainedAmount;
  100. ApprovalDateTime = approvalDateTime;
  101. UpdatedAt = DateTime.UtcNow;
  102. }
  103. public bool IsSuccess => ResponseCode == "0000";
  104. }