diff --git a/modules/payment/src/Payment.Domain.Shared/PaymentRequests/PaymentRequestCompletedEto.cs b/modules/payment/src/Payment.Domain.Shared/PaymentRequests/PaymentRequestCompletedEto.cs new file mode 100644 index 0000000..c537f1b --- /dev/null +++ b/modules/payment/src/Payment.Domain.Shared/PaymentRequests/PaymentRequestCompletedEto.cs @@ -0,0 +1,13 @@ +using System; +using Volo.Abp.Data; +using Volo.Abp.Domain.Entities.Events.Distributed; + +namespace Payment.PaymentRequests +{ + [Serializable] + public class PaymentRequestCompletedEto : EtoBase, IHasExtraProperties + { + public Guid PaymentRequestId { get; set; } + public ExtraPropertyDictionary ExtraProperties { get; set; } + } +} diff --git a/modules/payment/src/Payment.Domain.Shared/PaymentRequests/PaymentRequestFailedEto.cs b/modules/payment/src/Payment.Domain.Shared/PaymentRequests/PaymentRequestFailedEto.cs new file mode 100644 index 0000000..370cc28 --- /dev/null +++ b/modules/payment/src/Payment.Domain.Shared/PaymentRequests/PaymentRequestFailedEto.cs @@ -0,0 +1,16 @@ +using System; +using Volo.Abp.Data; +using Volo.Abp.Domain.Entities.Events.Distributed; + +namespace Payment.PaymentRequests +{ + [Serializable] + public class PaymentRequestFailedEto : EtoBase, IHasExtraProperties + { + public Guid PaymentRequestId { get; set; } + + public string FailReason { get; set; } + + public ExtraPropertyDictionary ExtraProperties { get; set; } + } +} diff --git a/modules/payment/src/Payment.Domain/PaymentRequests/PaymentRequest.cs b/modules/payment/src/Payment.Domain/PaymentRequests/PaymentRequest.cs index f90eff5..086639b 100644 --- a/modules/payment/src/Payment.Domain/PaymentRequests/PaymentRequest.cs +++ b/modules/payment/src/Payment.Domain/PaymentRequests/PaymentRequest.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using JetBrains.Annotations; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; @@ -49,14 +50,37 @@ namespace Payment.PaymentRequests public virtual void SetAsCompleted() { + if (State == PaymentRequestState.Completed) + { + return; + } + State = PaymentRequestState.Completed; FailReason = null; + + AddDistributedEvent(new PaymentRequestCompletedEto + { + PaymentRequestId = Id, + ExtraProperties = ExtraProperties + }); } public virtual void SetAsFailed(string failReason) { + if (State != PaymentRequestState.Failed) + { + return; + } + State = PaymentRequestState.Failed; FailReason = failReason; + + AddDistributedEvent(new PaymentRequestFailedEto + { + PaymentRequestId = Id, + FailReason = failReason, + ExtraProperties = ExtraProperties + }); } } } \ No newline at end of file