/// <summary>
 /// Plays the event.
 /// </summary>
 /// <param name="domainEvent">The domain event.</param>
 private void PlayEvent(RequestSentToSMSProviderEvent domainEvent)
 {
     this.MessageStatus = MessageStatus.InProgress;
     this.Sender        = domainEvent.Sender;
     this.Destination   = domainEvent.Destination;
     this.Message       = domainEvent.Message;
 }
        public void RequestSentToSMSProviderEvent_CanBeCreated_IsCreated()
        {
            RequestSentToSMSProviderEvent requestSentToProviderEvent = new RequestSentToSMSProviderEvent(TestData.MessageId, TestData.Sender, TestData.Destination, TestData.Message);

            requestSentToProviderEvent.ShouldNotBeNull();
            requestSentToProviderEvent.AggregateId.ShouldBe(TestData.MessageId);
            requestSentToProviderEvent.EventId.ShouldNotBe(Guid.Empty);
            requestSentToProviderEvent.MessageId.ShouldBe(TestData.MessageId);
            requestSentToProviderEvent.Sender.ShouldBe(TestData.Sender);
            requestSentToProviderEvent.Destination.ShouldBe(TestData.Destination);
            requestSentToProviderEvent.Message.ShouldBe(TestData.Message);
        }
        /// <summary>
        /// Sends the request to provider.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="destination">The destination.</param>
        /// <param name="message">The message.</param>
        /// <exception cref="System.InvalidOperationException">Cannot send a message to provider that has already been sent</exception>
        public void SendRequestToProvider(String sender,
                                          String destination,
                                          String message)
        {
            if (this.MessageStatus != MessageStatus.NotSet)
            {
                throw new InvalidOperationException("Cannot send a message to provider that has already been sent");
            }

            RequestSentToSMSProviderEvent requestSentToProviderEvent = new RequestSentToSMSProviderEvent(this.AggregateId, sender, destination, message);

            this.ApplyAndAppend(requestSentToProviderEvent);
        }
        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            Console.Title = "Messaging Service";

            //At this stage, we only need our hosting file for ip and ports
            IConfigurationRoot config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
                                        .AddJsonFile("hosting.json", optional: true)
                                        .AddJsonFile("hosting.development.json", optional: true)
                                        .AddEnvironmentVariables().Build();

            IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);

            hostBuilder.ConfigureLogging(logging =>
            {
                logging.AddConsole();
            }).ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup <Startup>();
                webBuilder.UseConfiguration(config);
                webBuilder.UseKestrel();
            })
            .ConfigureServices(services =>
            {
                RequestSentToEmailProviderEvent e = new RequestSentToEmailProviderEvent(Guid.Parse("2AA2D43B-5E24-4327-8029-1135B20F35CE"), "", new List <String>(),
                                                                                        "", "", true);

                RequestSentToSMSProviderEvent s = new RequestSentToSMSProviderEvent(Guid.NewGuid(), "", "", "");

                TypeProvider.LoadDomainEventsTypeDynamically();

                services.AddHostedService <SubscriptionWorker>(provider =>
                {
                    IDomainEventHandlerResolver r =
                        provider.GetRequiredService <IDomainEventHandlerResolver>();
                    EventStorePersistentSubscriptionsClient p = provider.GetRequiredService <EventStorePersistentSubscriptionsClient>();
                    HttpClient h = provider.GetRequiredService <HttpClient>();
                    SubscriptionWorker worker = new SubscriptionWorker(r, p, h);
                    worker.TraceGenerated    += Worker_TraceGenerated;
                    return(worker);
                });
            });
            return(hostBuilder);
        }