DanalLog.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. using Domain.Entities.Members;
  4. using Domain.Entities.Payments.Danal.ValueObject;
  5. namespace Domain.Entities.Payments.Danal;
  6. /// <summary>
  7. /// 다날 결제 에러 / 실패 / 가상계좌 웹훅 통합 로그
  8. /// </summary>
  9. public class DanalLog
  10. {
  11. [ForeignKey(nameof(MemberID))]
  12. public virtual Member? Member { get; private set; }
  13. [Key]
  14. public int ID { get; private set; }
  15. public int MemberID { get; private set; }
  16. /// <summary>로그 유형 (Failed, Error, Webhook)</summary>
  17. public DanalLogType LogType { get; private set; }
  18. /// <summary>결과/에러 코드</summary>
  19. public string Code { get; private set; } = default!;
  20. /// <summary>결과/에러 메시지</summary>
  21. public string Message { get; private set; } = default!;
  22. /// <summary>다날 거래번호 (있는 경우)</summary>
  23. public string? TransactionID { get; private set; }
  24. /// <summary>가맹점 주문번호 (있는 경우)</summary>
  25. public string? OrderID { get; private set; }
  26. /// <summary>추가 데이터 (JSON 등)</summary>
  27. public string? ExtraData { get; private set; }
  28. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  29. private DanalLog() { }
  30. public static DanalLog Create(
  31. int memberID,
  32. DanalLogType logType,
  33. string code,
  34. string message,
  35. string? transactionID = null,
  36. string? orderID = null,
  37. string? extraData = null
  38. ) {
  39. return new DanalLog
  40. {
  41. MemberID = memberID,
  42. LogType = logType,
  43. Code = code,
  44. Message = message,
  45. TransactionID = transactionID,
  46. OrderID = orderID,
  47. ExtraData = extraData
  48. };
  49. }
  50. }