public void PauseMessageSetsSchedulePauseFlag_Data()
        {
            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater {
                SmsData = new SmsData("1", "2")
            };
            var data = new ScheduledSmsData
            {
                OriginalMessage     = scheduleSmsForSendingLater,
                OriginalMessageData = new OriginalMessageData(scheduleSmsForSendingLater)
            };
            var scheduleId = Guid.NewGuid();
            var pauseScheduledMessageIndefinitely = new PauseScheduledMessageIndefinitely(scheduleId);

            Test.Initialize();
            Test.Saga <ScheduleSms>()
            .WithExternalDependencies(a => { a.Data = data; })
            .WhenReceivesMessageFrom("place")
            .ExpectSendLocal <ScheduleStatusChanged>(s =>
            {
                return(s.Status == MessageStatus.Paused &&
                       s.ScheduleId == pauseScheduledMessageIndefinitely.ScheduleMessageId &&
                       s.RequestTimeUtc == pauseScheduledMessageIndefinitely.MessageRequestTimeUtc);
            })

            .When(s => s.Handle(pauseScheduledMessageIndefinitely));

            Assert.IsTrue(data.SchedulingPaused);
        }
        public void TimeoutSendingPausedNoAction_Data()
        {
            var bus = MockRepository.GenerateStrictMock <IBus>();

            var dataId          = Guid.NewGuid();
            var originalMessage = new ScheduleSmsForSendingLater {
                SmsData = new SmsData("3443", "message"), SmsMetaData = new SmsMetaData {
                    Tags = new List <string> {
                        "a", "b"
                    }, Topic = "topic"
                }
            };
            var data = new ScheduledSmsData {
                Id = dataId, OriginalMessage = originalMessage, SchedulingPaused = true
            };

            var scheduleSms = new ScheduleSms {
                Bus = bus, Data = data
            };
            var timeoutMessage = new ScheduleSmsTimeout();

            scheduleSms.Timeout(timeoutMessage);

            bus.VerifyAllExpectations();
        }
Example #3
0
        public void Handle(ScheduleSmsForSendingLater scheduleSmsForSendingLater)
        {
            Data.OriginalMessageData     = new OriginalMessageData(scheduleSmsForSendingLater);
            Data.OriginalMessage         = scheduleSmsForSendingLater;
            Data.ScheduleMessageId       = scheduleSmsForSendingLater.ScheduleMessageId == Guid.NewGuid() ? Data.Id : scheduleSmsForSendingLater.ScheduleMessageId;
            Data.RequestingCoordinatorId = scheduleSmsForSendingLater.CorrelationId;
            Data.TimeoutCounter          = 0;
            var timeout = new DateTime(scheduleSmsForSendingLater.SendMessageAtUtc.Ticks, DateTimeKind.Utc);

            RequestUtcTimeout(timeout, new ScheduleSmsTimeout {
                TimeoutCounter = 0
            });
            Bus.SendLocal(new ScheduleCreated
            {
                CorrelationId   = scheduleSmsForSendingLater.CorrelationId,
                ScheduleId      = Data.ScheduleMessageId,
                ScheduleTimeUtc = scheduleSmsForSendingLater.SendMessageAtUtc,
                SmsData         = scheduleSmsForSendingLater.SmsData,
                SmsMetaData     = scheduleSmsForSendingLater.SmsMetaData
            });
            Bus.Publish(new SmsScheduled
            {
                ScheduleMessageId      = Data.ScheduleMessageId,
                CoordinatorId          = scheduleSmsForSendingLater.CorrelationId,
                SmsData                = scheduleSmsForSendingLater.SmsData,
                SmsMetaData            = scheduleSmsForSendingLater.SmsMetaData,
                ScheduleSendingTimeUtc = scheduleSmsForSendingLater.SendMessageAtUtc
            });
        }
        public void ReschedulePausedSchedule_Data()
        {
            var sagaId            = Guid.NewGuid();
            var scheduleMessageId = Guid.NewGuid();

            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater {
                SmsData = new SmsData("1", "msg"), SmsMetaData = new SmsMetaData(), SendMessageAtUtc = DateTime.Now
            };
            var scheduledSmsData = new ScheduledSmsData
            {
                Id = sagaId,
                ScheduleMessageId   = scheduleMessageId,
                Originator          = "place",
                OriginalMessageId   = Guid.NewGuid().ToString(),
                OriginalMessage     = scheduleSmsForSendingLater,
                OriginalMessageData = new OriginalMessageData(scheduleSmsForSendingLater)
            };

            Test.Initialize();
            var rescheduleMessage = new RescheduleScheduledMessageWithNewTime(scheduleMessageId, new DateTime(2040, 4, 4, 4, 4, 4, DateTimeKind.Utc));

            Test.Saga <ScheduleSms>()
            .WithExternalDependencies(a => { a.Data = scheduledSmsData; })
            .ExpectTimeoutToBeSetAt <ScheduleSmsTimeout>((state, span) => span == rescheduleMessage.NewScheduleTimeUtc)
            .ExpectPublish <MessageRescheduled>()
            .When(s => s.Handle(rescheduleMessage));

            Assert.IsFalse(scheduledSmsData.SchedulingPaused);
        }
        public void TimeoutPromptsMessageSending_Data()
        {
            var bus = MockRepository.GenerateMock <IBus>();

            var sendOneMessageNow = new SendOneMessageNow();

            bus.Expect(b => b.Send(Arg <SendOneMessageNow> .Is.NotNull))
            .WhenCalled(i => sendOneMessageNow = (SendOneMessageNow)((i.Arguments[0])));

            var dataId          = Guid.NewGuid();
            var originalMessage = new ScheduleSmsForSendingLater {
                SmsData = new SmsData("3443", "message"), SmsMetaData = new SmsMetaData {
                    Tags = new List <string> {
                        "a", "b"
                    }, Topic = "topic"
                }
            };
            var data = new ScheduledSmsData {
                Id = dataId, OriginalMessage = originalMessage
            };

            var scheduleSms = new ScheduleSms {
                Bus = bus, Data = data
            };
            var timeoutMessage = new ScheduleSmsTimeout();

            scheduleSms.Timeout(timeoutMessage);

            Assert.That(sendOneMessageNow.SmsData, Is.EqualTo(data.OriginalMessage.SmsData));
            Assert.That(sendOneMessageNow.SmsMetaData, Is.EqualTo(data.OriginalMessage.SmsMetaData));
            Assert.That(sendOneMessageNow.CorrelationId, Is.EqualTo(data.Id));

            bus.VerifyAllExpectations();
        }
        public void ResumePausedSchedule_Data()
        {
            var sagaId            = Guid.NewGuid();
            var scheduleMessageId = Guid.NewGuid();

            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater {
                SmsData = new SmsData("1", "msg"), SmsMetaData = new SmsMetaData(), SendMessageAtUtc = DateTime.Now
            };
            var scheduledSmsData = new ScheduledSmsData
            {
                Id = sagaId,
                ScheduleMessageId   = scheduleMessageId,
                Originator          = "place",
                OriginalMessageId   = Guid.NewGuid().ToString(),
                OriginalMessage     = scheduleSmsForSendingLater,
                OriginalMessageData = new OriginalMessageData(scheduleSmsForSendingLater)
            };

            Test.Initialize();
            var rescheduleMessage = new ResumeScheduledMessageWithOffset(scheduleMessageId, new TimeSpan(0, 1, 0, 0));
            var rescheduledTime   = scheduledSmsData.OriginalMessage.SendMessageAtUtc.Add(rescheduleMessage.Offset);

            Test.Saga <ScheduleSms>()
            .WithExternalDependencies(a => { a.Data = scheduledSmsData; })
            .ExpectTimeoutToBeSetAt <ScheduleSmsTimeout>((state, span) => span == rescheduledTime)
            .ExpectPublish <MessageRescheduled>()
            .When(s => s.Handle(rescheduleMessage));
        }
        public void ScheduleSmsForSendingLaterButIsPaused()
        {
            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater {
                SendMessageAtUtc = DateTime.Now.AddDays(1), SmsData = new SmsData("1", "2"), ScheduleMessageId = Guid.NewGuid()
            };
            var sagaId = Guid.NewGuid();

            var scheduledSmsData = new ScheduledSmsData
            {
                Id                = sagaId,
                Originator        = "place",
                OriginalMessageId = "one",
                OriginalMessage   = new ScheduleSmsForSendingLater {
                    SmsData = new SmsData("1", "msg"), SmsMetaData = new SmsMetaData()
                }
            };

            Test.Initialize();
            Test.Saga <ScheduleSms>()
            .WithExternalDependencies(a => { a.Data = scheduledSmsData; })
            .ExpectTimeoutToBeSetAt <ScheduleSmsTimeout>((state, timeout) => timeout == scheduleSmsForSendingLater.SendMessageAtUtc)
            .ExpectSendLocal <ScheduleCreated>()
            .When(s => s.Handle(scheduleSmsForSendingLater))
            .ExpectPublish <MessageSchedulePaused>()
            .ExpectSendLocal <ScheduleStatusChanged>(s => s.Status == MessageStatus.Paused)
            .When(s => s.Handle(new PauseScheduledMessageIndefinitely(Guid.Empty)))
            .ExpectNotSend <SendOneMessageNow>(now => false)
            .WhenSagaTimesOut();
        }
        public void ScheduleSmsForSendingLater()
        {
            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater {
                SendMessageAtUtc = DateTime.Now.AddDays(1), ScheduleMessageId = Guid.NewGuid()
            };
            var sagaId      = Guid.NewGuid();
            var messageSent = new MessageSuccessfullyDelivered {
                ConfirmationData = new SmsConfirmationData("a", DateTime.Now, 3), SmsData = new SmsData("1", "2")
            };

            var scheduledSmsData = new ScheduledSmsData
            {
                Id                = sagaId,
                Originator        = "place",
                OriginalMessageId = Guid.NewGuid().ToString(),
                OriginalMessage   = new ScheduleSmsForSendingLater {
                    SmsData = new SmsData("1", "msg"), SmsMetaData = new SmsMetaData()
                }
            };

            Test.Initialize();
            Test.Saga <ScheduleSms>()
            .WithExternalDependencies(a => { a.Data = scheduledSmsData; })
            .ExpectTimeoutToBeSetAt <ScheduleSmsTimeout>((state, timeout) => timeout == scheduleSmsForSendingLater.SendMessageAtUtc)
            .ExpectSendLocal <ScheduleCreated>()
            .When(s => s.Handle(scheduleSmsForSendingLater))
            .ExpectSend <SendOneMessageNow>()
            .WhenSagaTimesOut()
            .ExpectPublish <ScheduledSmsSent>()
            .ExpectSendLocal <ScheduleSucceeded>(s => { return(s.ConfirmationData == messageSent.ConfirmationData && s.ScheduleId == scheduleSmsForSendingLater.ScheduleMessageId); })
            .When(s => s.Handle(messageSent))
            .AssertSagaCompletionIs(true);
        }
        public void ScheduleSmsForSendingLaterButFails()
        {
            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater {
                SendMessageAtUtc = DateTime.Now.AddDays(1), ScheduleMessageId = Guid.NewGuid()
            };
            var sagaId        = Guid.NewGuid();
            var messageFailed = new MessageFailedSending {
                SmsData = new SmsData("1", "2"), SmsFailed = new SmsFailed(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty)
            };

            var scheduledSmsData = new ScheduledSmsData
            {
                Id                = sagaId,
                Originator        = "place",
                OriginalMessageId = Guid.NewGuid().ToString(),
                OriginalMessage   = new ScheduleSmsForSendingLater {
                    SmsData = new SmsData("1", "msg"), SmsMetaData = new SmsMetaData()
                }
            };

            Test.Initialize();
            Test.Saga <ScheduleSms>()
            .WithExternalDependencies(a => { a.Data = scheduledSmsData; })
            .ExpectTimeoutToBeSetAt <ScheduleSmsTimeout>((state, timeout) => timeout == scheduleSmsForSendingLater.SendMessageAtUtc)
            .When(s => s.Handle(scheduleSmsForSendingLater))
            .ExpectSend <SendOneMessageNow>()
            .WhenSagaTimesOut()
            .ExpectPublish <ScheduledSmsFailed>()
            .ExpectSendLocal <ScheduleFailed>()
            .When(s => s.Handle(messageFailed))
            .AssertSagaCompletionIs(true);
        }
Example #10
0
 public OriginalMessageData(ScheduleSmsForSendingLater requestMessage)
 {
     RequestingCoordinatorId = requestMessage.CorrelationId;
     Username                = requestMessage.Username;
     Number                  = requestMessage.SmsData.Mobile;
     Message                 = requestMessage.SmsData.Message;
     Topic                   = requestMessage.SmsMetaData.Topic;
     Tags                    = requestMessage.SmsMetaData.Tags;
     ConfirmationEmail       = requestMessage.ConfirmationEmail;
     OriginalRequestSendTime = requestMessage.SendMessageAtUtc;
 }
        public void OriginalMessageGetsSavedToSaga_Data()
        {
            var data            = new ScheduledSmsData();
            var originalMessage = new ScheduleSmsForSendingLater {
                SendMessageAtUtc = DateTime.Now
            };

            Test.Initialize();
            Test.Saga <ScheduleSms>()
            .WithExternalDependencies(a => { a.Data = data; })
            .WhenReceivesMessageFrom("address")
            .ExpectPublish <SmsScheduled>(m => m.CoordinatorId == data.Id && m.ScheduleMessageId == originalMessage.ScheduleMessageId)
            .When(s => s.Handle(originalMessage));

            Assert.That(data.OriginalMessage, Is.EqualTo(originalMessage));
        }
        public void ScheduleSmsForSendingLaterButIsPausedThenResumedOutOfOrderAndSent()
        {
            var scheduleSmsForSendingLater = new ScheduleSmsForSendingLater {
                SendMessageAtUtc = DateTime.Now.AddDays(1), SmsData = new SmsData("1", "2"), ScheduleMessageId = Guid.NewGuid()
            };
            var sagaId = Guid.NewGuid();

            var scheduledSmsData = new ScheduledSmsData
            {
                Id                = sagaId,
                Originator        = "place",
                OriginalMessageId = Guid.NewGuid().ToString(),
                OriginalMessage   = new ScheduleSmsForSendingLater
                {
                    SmsData     = new SmsData("1", "msg"),
                    SmsMetaData = new SmsMetaData()
                }
            };

            Test.Initialize();
            Test.Saga <ScheduleSms>()
            .WithExternalDependencies(a => { a.Data = scheduledSmsData; })
            .ExpectTimeoutToBeSetAt <ScheduleSmsTimeout>((state, timeout) => timeout == scheduleSmsForSendingLater.SendMessageAtUtc && state.TimeoutCounter == 0)
            .ExpectSendLocal <ScheduleCreated>()
            .When(s => s.Handle(scheduleSmsForSendingLater))
            .ExpectTimeoutToBeSetAt <ScheduleSmsTimeout>((state, timeout) => state.TimeoutCounter == 1)
            .ExpectPublish <MessageRescheduled>()
            .ExpectSendLocal <ScheduleStatusChanged>(s => s.Status == MessageStatus.Scheduled)
            .When(s => s.Handle(new ResumeScheduledMessageWithOffset(Guid.Empty, new TimeSpan())
            {
                MessageRequestTimeUtc = DateTime.Now
            }))
            .When(s => s.Handle(new PauseScheduledMessageIndefinitely(Guid.Empty)
            {
                MessageRequestTimeUtc = DateTime.Now.AddMinutes(-10)
            }))
            .ExpectSend <SendOneMessageNow>()
            .When(s => s.Timeout(new ScheduleSmsTimeout {
                TimeoutCounter = 1
            }))
            .ExpectPublish <ScheduledSmsSent>()
            .ExpectSendLocal <ScheduleSucceeded>()
            .When(s => s.Handle(new MessageSuccessfullyDelivered {
                ConfirmationData = new SmsConfirmationData("a", DateTime.Now, 3), SmsData = new SmsData("1", "2")
            }))
            .AssertSagaCompletionIs(true);
        }
        public void Handle(SendAllMessagesAtOnce message)
        {
            // TODO: make a timeout for this then just send the messsages directly to the sms actioner
            Data.CoordinatorId             = message.CoordinatorId == Guid.Empty ? Data.Id : message.CoordinatorId;
            Data.OriginalScheduleStartTime = message.SendTimeUtc;
            Data.EmailAddresses            = message.ConfirmationEmails;
            Data.UserOlsenTimeZone         = message.UserOlsenTimeZone;
            Data.Topic = message.MetaData.Topic;
            var messageList = new List <ScheduleSmsForSendingLater>();

            for (int i = 0; i < message.Messages.Count; i++)
            {
                var smsData            = new SmsData(message.Messages[i].Mobile, message.Messages[i].Message);
                var smsForSendingLater = new ScheduleSmsForSendingLater(message.SendTimeUtc, smsData, message.MetaData, Data.CoordinatorId, message.Username)
                {
                    CorrelationId = Data.CoordinatorId
                };
                messageList.Add(smsForSendingLater);
            }
            messageList.ForEach(m => Bus.Send(m));
            //Bus.Send(messageList.ToArray());
            var coordinatorCreated = new CoordinatorCreated
            {
                CoordinatorId     = Data.CoordinatorId,
                ScheduledMessages = messageList.Select(m => new MessageSchedule {
                    Number = m.SmsData.Mobile, ScheduledTimeUtc = m.SendMessageAtUtc, ScheduleMessageId = m.ScheduleMessageId
                }).ToList(),
                CreationDateUtc            = DateTime.UtcNow,
                MetaData                   = message.MetaData,
                ConfirmationEmailAddresses = message.ConfirmationEmails,
                UserOlsenTimeZone          = message.UserOlsenTimeZone,
                MessageBody                = message.Messages.First().Message,
                MessageCount               = message.Messages.Count
            };

            RequestUtcTimeout <CoordinatorTimeout>(message.SendTimeUtc.AddMinutes(2));
            Bus.Publish(coordinatorCreated);
            Bus.SendLocal(new CoordinatorCreatedEmail(coordinatorCreated));
            RavenScheduleDocuments.SaveCoordinator(coordinatorCreated);
            RavenScheduleDocuments.SaveSchedules(messageList, Data.CoordinatorId);
        }
        public void Handle(TrickleSmsOverCalculatedIntervalsBetweenSetDates message)
        {
            Data.CoordinatorId             = message.CoordinatorId == Guid.Empty ? Data.Id : message.CoordinatorId;
            Data.OriginalScheduleStartTime = message.StartTimeUtc;
            Data.EmailAddresses            = message.ConfirmationEmails;
            Data.UserOlsenTimeZone         = message.UserOlsenTimeZone;
            Data.Topic = message.MetaData.Topic;
            var messageTiming            = TimingManager.CalculateTiming(message.StartTimeUtc, message.Duration, message.Messages.Count);
            var lastScheduledMessageTime = message.StartTimeUtc.Add(message.Duration);
            var messageList = new List <ScheduleSmsForSendingLater>();

            for (int i = 0; i < message.Messages.Count; i++)
            {
                var smsData            = new SmsData(message.Messages[i].Mobile, message.Messages[i].Message);
                var smsForSendingLater = new ScheduleSmsForSendingLater(messageTiming[i], smsData, message.MetaData, Data.CoordinatorId, message.Username);
                messageList.Add(smsForSendingLater);
            }
            messageList.ForEach(m => Bus.Send(m));
            //Bus.Send(messageList.ToArray());
            var coordinatorCreated = new CoordinatorCreated
            {
                CoordinatorId     = Data.CoordinatorId,
                ScheduledMessages = messageList.Select(m => new MessageSchedule {
                    Number = m.SmsData.Mobile, ScheduledTimeUtc = m.SendMessageAtUtc, ScheduleMessageId = m.ScheduleMessageId
                }).ToList(),
                CreationDateUtc            = DateTime.UtcNow,
                MetaData                   = message.MetaData,
                ConfirmationEmailAddresses = message.ConfirmationEmails,
                UserOlsenTimeZone          = message.UserOlsenTimeZone,
                MessageBody                = message.Messages.First().Message,
                MessageCount               = message.Messages.Count
            };

            RavenScheduleDocuments.SaveCoordinator(coordinatorCreated);
            RavenScheduleDocuments.SaveSchedules(messageList, Data.CoordinatorId);

            RequestUtcTimeout <CoordinatorTimeout>(lastScheduledMessageTime.AddMinutes(2));
            Bus.Publish(coordinatorCreated);
            Bus.SendLocal(new CoordinatorCreatedEmail(coordinatorCreated));
        }
//        public void Handle(TrickleSmsWithDefinedTimeBetweenEachMessage message)
//        {
//            Data.CoordinatorId = message.CoordinatorId == Guid.Empty ? Data.Id : message.CoordinatorId;
//            Data.OriginalScheduleStartTime = message.StartTimeUtc;
//            Data.EmailAddresses = message.ConfirmationEmails;
//            Data.UserOlsenTimeZone = message.UserOlsenTimeZone;
//            Data.Topic = message.MetaData.Topic;
//            var messageList = new List<ScheduleSmsForSendingLater>();
//            DateTime lastScheduledMessageTime = DateTime.Now;
//            for(int i = 0; i < message.Messages.Count; i++)
//            {
//                var extraTime = TimeSpan.FromTicks(message.TimeSpacing.Ticks*i);
//                lastScheduledMessageTime = message.StartTimeUtc.Add(extraTime);
//                var smsData = new SmsData(message.Messages[i].Mobile, message.Messages[i].Message);
//                var smsForSendingLater = new ScheduleSmsForSendingLater(message.StartTimeUtc.Add(extraTime), smsData, message.MetaData, Data.CoordinatorId, message.Username)
//                {
//                    CorrelationId = Data.CoordinatorId
//                };
//                messageList.Add(smsForSendingLater);
//            }
//            messageList.ForEach(m => Bus.Send(m));
//            //Bus.Send(messageList.ToArray());
//            var coordinatorCreated = new CoordinatorCreated
//            {
//                CoordinatorId = Data.CoordinatorId,
//                ScheduledMessages = messageList.Select(m => new MessageSchedule { Number = m.SmsData.Mobile, ScheduledTimeUtc = m.SendMessageAtUtc, ScheduleMessageId = m.ScheduleMessageId }).ToList(),
//                CreationDateUtc = DateTime.UtcNow,
//                MetaData = message.MetaData,
//                ConfirmationEmailAddresses = message.ConfirmationEmails,
//                UserOlsenTimeZone = message.UserOlsenTimeZone,
//                MessageBody = message.Messages.First().Message,
//                MessageCount = message.Messages.Count
//            };
//            Bus.Publish(coordinatorCreated);
//            Bus.SendLocal(new CoordinatorCreatedEmail(coordinatorCreated));
//            RequestUtcTimeout<CoordinatorTimeout>(lastScheduledMessageTime.AddMinutes(2));
//
//            RavenScheduleDocuments.SaveCoordinator(coordinatorCreated);
//            RavenScheduleDocuments.SaveSchedules(messageList, Data.CoordinatorId);
//        }

        public void Handle(TrickleSmsAndEmailBetweenSetTimes message)
        {
            Data.CoordinatorId             = message.CoordinatorId == Guid.Empty ? Data.Id : message.CoordinatorId;
            Data.OriginalScheduleStartTime = message.StartTimeUtc;
            Data.EmailAddresses            = message.ConfirmationEmails;
            Data.UserOlsenTimeZone         = message.UserOlsenTimeZone;
            Data.Topic    = message.MetaData.Topic;
            Data.Username = message.Username;
            var smsAndEmailCoordinatorData = RavenScheduleDocuments.GetSmsAndEmailCoordinatorData(message.SmsAndEmailDataId);

            if (smsAndEmailCoordinatorData == null)
            {
                throw new NotImplementedException("Need the data!");
            }
            var messageTiming            = TimingManager.CalculateTiming(message.StartTimeUtc, message.Duration, smsAndEmailCoordinatorData.CustomerContacts.Count);
            var lastScheduledMessageTime = DateTime.Now.AddTicks(message.Duration.Ticks);
            var messageList = new List <object>();
            var smsList     = new List <ScheduleSmsForSendingLater>();
            var emailList   = new List <ScheduleEmailForSendingLater>();

            for (int i = 0; i < smsAndEmailCoordinatorData.CustomerContacts.Count; i++)
            {
                if (smsAndEmailCoordinatorData.CustomerContacts[i].SmsCustomer())
                {
                    var smsData            = new SmsData(smsAndEmailCoordinatorData.CustomerContacts[i].MobileNumber, message.SmsMessage);
                    var smsForSendingLater = new ScheduleSmsForSendingLater(messageTiming[i], smsData, message.MetaData, Data.CoordinatorId, message.Username)
                    {
                        CorrelationId = Data.CoordinatorId
                    };
                    messageList.Add(smsForSendingLater);
                    smsList.Add(smsForSendingLater);
                }
                if (smsAndEmailCoordinatorData.CustomerContacts[i].EmailCustomer())
                {
                    var emailData            = new EmailData(message.EmailData, smsAndEmailCoordinatorData.CustomerContacts[i].EmailAddress);
                    var emailForSendingLater = new ScheduleEmailForSendingLater(messageTiming[i], emailData, message.MetaData, Data.CoordinatorId, message.Username)
                    {
                        CorrelationId = Data.CoordinatorId
                    };
                    messageList.Add(emailForSendingLater);
                    emailList.Add(emailForSendingLater);
                }
            }
            messageList.ForEach(m => Bus.Send("smsscheduler", m));
            var coordinatorCreated = new CoordinatorCreatedWithEmailAndSms
            {
                CoordinatorId              = Data.CoordinatorId,
                CreationDateUtc            = DateTime.UtcNow,
                MetaData                   = message.MetaData,
                ConfirmationEmailAddresses = message.ConfirmationEmails,
                UserOlsenTimeZone          = message.UserOlsenTimeZone,
                SmsMessage                 = message.SmsMessage,
                SmsCount                   = smsAndEmailCoordinatorData.CustomerContacts.Count(c => c.SmsCustomer()),
                EmailCount                 = smsAndEmailCoordinatorData.CustomerContacts.Count(c => c.EmailCustomer()),
                EmailData                  = message.EmailData,
                UserName                   = message.Username
            };

            RequestUtcTimeout <CoordinatorTimeout>(lastScheduledMessageTime.AddMinutes(2));
            Bus.Publish(coordinatorCreated);
            // TODO: Send email message
            //Bus.SendLocal(new CoordinatorCreatedEmail(coordinatorCreated));

            RavenScheduleDocuments.SaveCoordinator(coordinatorCreated);
            RavenScheduleDocuments.SaveSchedules(messageList, Data.CoordinatorId);
        }
Example #16
0
        public override object OnPost(Schedule request)
        {
            var response = new ResponseStatus {
                Errors = new List <ResponseError>()
            };

            if (request.ScheduledTimeUtc == DateTime.MinValue)
            {
                response.Errors.Add(new ResponseError {
                    Message = "Start time must be set"
                });
            }
            if (request.ScheduledTimeUtc < DateTime.Now.ToUniversalTime())
            {
                response.Errors.Add(new ResponseError {
                    Message = "Start time must not be in the past"
                });
            }
            if (string.IsNullOrWhiteSpace(request.MessageBody))
            {
                response.Errors.Add(new ResponseError {
                    Message = "Sms message required"
                });
            }
            else if (request.MessageBody.Length > 160)
            {
                response.Errors.Add(new ResponseError {
                    Message = "Sms message exceeds 160 character length"
                });
            }
            if (request.Number == null)
            {
                response.Errors.Add(new ResponseError {
                    Message = "Number required"
                });
            }

            if (response.Errors.Count > 0)
            {
                return new SmsScheduleResponse {
                           ResponseStatus = response
                }
            }
            ;

            var scheduleMessage = new ScheduleSmsForSendingLater
            {
                SendMessageAtUtc = request.ScheduledTimeUtc.ToUniversalTime(),
                SmsData          = new SmsData(request.Number, request.MessageBody),
                SmsMetaData      = new SmsMetaData {
                    Tags = request.Tags, Topic = request.Topic
                },
                ScheduleMessageId = Guid.NewGuid()
            };

            Bus.Send(scheduleMessage);
            return(new SmsScheduleResponse {
                RequestId = scheduleMessage.ScheduleMessageId
            });
        }
    }
Example #17
0
 public void Handle(ScheduleSmsForSendingLater scheduleSmsForSendingLater)
 {
     RequestUtcTimeout <ScheduleSmsTimeout>(scheduleSmsForSendingLater.SendMessageAt);
 }