/// <summary> /// Messages the send to recipient failure. /// </summary> /// <param name="providerSMSReference">The provider SMS reference.</param> public void ReceiveResponseFromProvider(String providerSMSReference) { ResponseReceivedFromSMSProviderEvent responseReceivedFromProviderEvent = new ResponseReceivedFromSMSProviderEvent(this.AggregateId, providerSMSReference); this.ApplyAndAppend(responseReceivedFromProviderEvent); }
/// <summary> /// Handles the specific domain event. /// </summary> /// <param name="domainEvent">The domain event.</param> /// <param name="cancellationToken">The cancellation token.</param> private async Task HandleSpecificDomainEvent(ResponseReceivedFromSMSProviderEvent domainEvent, CancellationToken cancellationToken) { SMSAggregate smsAggregate = await this.AggregateRepository.GetLatestVersion(domainEvent.MessageId, cancellationToken); // Update the aggregate with the status request information // Get the message status from the provider MessageStatusResponse messageStatus = await this.SMSServiceProxy.GetMessageStatus(domainEvent.ProviderSMSReference, cancellationToken); // Update the aggregate with the response switch (messageStatus.MessageStatus) { case MessageStatus.Expired: smsAggregate.MarkMessageAsExpired(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Rejected: smsAggregate.MarkMessageAsRejected(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Undeliverable: smsAggregate.MarkMessageAsUndeliverable(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Delivered: smsAggregate.MarkMessageAsDelivered(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; } // Save the changes await this.AggregateRepository.SaveChanges(smsAggregate, cancellationToken); }
public void ResponseReceivedFromSMSProviderEvent_CanBeCreated_IsCreated() { ResponseReceivedFromSMSProviderEvent requestSentToProviderEvent = new ResponseReceivedFromSMSProviderEvent(TestData.MessageId, TestData.ProviderSMSReference); requestSentToProviderEvent.ShouldNotBeNull(); requestSentToProviderEvent.AggregateId.ShouldBe(TestData.MessageId); requestSentToProviderEvent.EventId.ShouldNotBe(Guid.Empty); requestSentToProviderEvent.MessageId.ShouldBe(TestData.MessageId); requestSentToProviderEvent.ProviderSMSReference.ShouldBe(TestData.ProviderSMSReference); }
/// <summary> /// Plays the event. /// </summary> /// <param name="domainEvent">The domain event.</param> private void PlayEvent(ResponseReceivedFromSMSProviderEvent domainEvent) { this.ProviderReference = domainEvent.ProviderSMSReference; this.MessageStatus = MessageStatus.Sent; }