Beispiel #1
0
        public void CanCreateTaskForApprpriateClients()
        {
            var clientRepository = new LocalRepository <Client>();
            var taskQueueStorage = new Mock <ITaskQueueStorage>();
            var taskRepository   = new LocalRepository <InsideModel.Models.Task>();
            var serverTime       = new Mock <IServerTime>();
            var taskManager      = new Mock <ITaskManager>();

            var task = new CreateUpdatePhonecallsTasksForClients(
                clientRepository,
                taskQueueStorage.Object,
                taskRepository,
                serverTime.Object,
                taskManager.Object);

            clientRepository.Add(ModelHelper.TestClient1AllDataNoReferences);
            clientRepository.Add(ModelHelper.TestClient2AllDataNoReferences);

            var taskExecutionDate = new DateTime(2014, 01, 01);

            serverTime.Setup(st => st.RequestStarted).Returns(taskExecutionDate);

            var taskMessage = "{\"StartDate\":\"2014-01-01\",\"EndDate\":\"2014-02-01\"}";
            var message     = new InsideModel.Models.Task()
            {
                Message = taskMessage
            };

            task.PerformTask(message);

            taskQueueStorage.Verify(ts => ts.Add(It.Is <InsideModel.Models.Task>(t => t.Message == "{\"ClientId\":1,\"StartDate\":\"2014-01-01T00:00:00\",\"EndDate\":\"2014-02-01T00:00:00\"}")), Times.Exactly(1));
            taskQueueStorage.Verify(ts => ts.Add(It.Is <InsideModel.Models.Task>(t => t.Message == "{\"ClientId\":3,\"StartDate\":\"2014-01-01T00:00:00\",\"EndDate\":\"2014-02-01T00:00:00\"}")), Times.Exactly(1));
        }
Beispiel #2
0
        public void NoPhoneCallsForDatePeriodDoesNotTranslateToAnyContact()
        {
            var clientRepository     = new LocalRepository <Client>();
            var externalDataProvider = new Mock <IExternalDataProvider>();
            var contactRepository    = new Mock <IRepository <Contact> >();
            var contactAutoRating    = new Mock <IContactAutoRating>();

            clientRepository.Add(ModelHelper.TestClient1AllDataNoReferences);

            var startDate = new DateTime(2014, 01, 01);
            var endDate   = new DateTime(2014, 02, 01);

            externalDataProvider.Setup(x => x.GetPhoneData(1, startDate, endDate)).Returns("");

            var task = new UpdatePhonecalls(
                clientRepository,
                contactRepository.Object,
                externalDataProvider.Object,
                contactAutoRating.Object);

            var taskMessage = "{\"ClientId\":1,\"StartDate\":\"2014-01-01T00:00:00\",\"EndDate\":\"2014-02-01T00:00:00\"}";
            var message     = new InsideModel.Models.Task()
            {
                Message = taskMessage
            };

            task.PerformTask(message);

            externalDataProvider.Verify(x => x.MapPhoneDataToContact(It.IsAny <CallTrackingMetricsWebhookData>()), Times.Never);

            contactRepository.Verify(cr => cr.Add(It.IsAny <Contact>()), Times.Never);
        }
Beispiel #3
0
        public void NoCtmIdThrowsException()
        {
            var clientRepository     = new LocalRepository <Client>();
            var externalDataProvider = new Mock <IExternalDataProvider>();
            var contactRepository    = new Mock <IRepository <Contact> >();
            var contactAutoRating    = new Mock <IContactAutoRating>();

            clientRepository.Add(new Client()
            {
                Id = 1
            });

            var startDate = new DateTime(2014, 01, 01);
            var endDate   = new DateTime(2014, 02, 01);

            externalDataProvider.Setup(x => x.GetPhoneData(1, startDate, endDate)).Returns("{\"calls\":[{\"id\": 1}, {\"id\": 2}],\"next_page\":null,\"previous_page\":null,\"total_pages\":1,\"page\":1}");

            var task = new UpdatePhonecalls(
                clientRepository,
                contactRepository.Object,
                externalDataProvider.Object,
                contactAutoRating.Object);

            var taskMessage = "{\"ClientId\":1,\"StartDate\":\"2014-01-01T00:00:00\",\"EndDate\":\"2014-02-01T00:00:00\"}";
            var message     = new InsideModel.Models.Task()
            {
                Message = taskMessage
            };

            task.PerformTask(message);

            externalDataProvider.Verify(x => x.MapPhoneDataToContact(It.IsAny <CallTrackingMetricsWebhookData>()), Times.Never);
            contactRepository.Verify(cr => cr.Add(It.IsAny <Contact>()), Times.Never);
        }
Beispiel #4
0
        public void CanPerfomTaskForClientsTranslateAllCallsInData()
        {
            var clientRepository     = new LocalRepository <Client>();
            var externalDataProvider = new Mock <IExternalDataProvider>();
            var contactRepository    = new Mock <IRepository <Contact> >();
            var contactAutoRating    = new Mock <IContactAutoRating>();

            clientRepository.Add(ModelHelper.TestClient1AllDataNoReferences);

            var startDate = new DateTime(2014, 01, 01);
            var endDate   = new DateTime(2014, 02, 01);

            externalDataProvider.Setup(x => x.GetPhoneData(1, startDate, endDate)).Returns("{\"calls\":[{\"id\": 1,\"account_id\":1}, {\"id\": 2,\"account_id\":1}],\"next_page\":null,\"previous_page\":null,\"total_pages\":1,\"page\":1}");

            var task = new UpdatePhonecalls(
                clientRepository,
                contactRepository.Object,
                externalDataProvider.Object,
                contactAutoRating.Object);

            var taskMessage = "{\"ClientId\":1,\"StartDate\":\"2014-01-01T00:00:00\",\"EndDate\":\"2014-02-01T00:00:00\"}";
            var message     = new InsideModel.Models.Task()
            {
                Message = taskMessage
            };

            task.PerformTask(message);

            externalDataProvider.Verify(x => x.MapPhoneDataToContact(It.Is <CallTrackingMetricsWebhookData>(ctm => ctm.id == 1)), Times.Once);
            externalDataProvider.Verify(x => x.MapPhoneDataToContact(It.Is <CallTrackingMetricsWebhookData>(ctm => ctm.id == 2)), Times.Once);

            contactRepository.Verify(cr => cr.Add(It.IsAny <Contact>()), Times.Exactly(2));
        }
Beispiel #5
0
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var importDate           = DateTime.UtcNow;
            var beginingOfImportDate = importDate.Date;
            var cutOffDate           = beginingOfImportDate.AddDays(1);

            Console.WriteLine("Begin import seo data");

            var seoJson =
                downloadManager.FetchUrl(
                    "http://serpbook.com/serp/api/?viewkey=63xc118&auth=aba2dfa3bdea8475e07d35a24a2b4bc6");

            seoJson = seoJson.Replace("\"n\\/a\"", "\"null\"");

            var seoPositions = JsonConvert.DeserializeObject(seoJson, typeof(IEnumerable <SearchEngineRank>)) as IEnumerable <SearchEngineRank>;

            if (!serpRankingRepository.Any(s => s.Date >= beginingOfImportDate && s.Date < cutOffDate))
            {
                foreach (var searchPosition in seoPositions)
                {
                    var serpRanking = serpRankingRepository.Create();
                    serpRanking.Date = importDate;
                    seoDataMapper.Map(searchPosition, serpRanking);
                    serpRankingRepository.Add(serpRanking);
                }

                serpRankingRepository.SaveChanges();
                Console.WriteLine("Completed import seo data -  Added " + seoPositions.Count() + " keywords",
                                  "Information");
            }
            else
            {
                throw new Exception("Seo Data for " + importDate.ToString("yyyy-MM-dd") + " already exists");
            }
        }
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var createProductAnalyticTask = JsonConvert.DeserializeObject <TaskMessageWithStartDateAndEndDate>(taskMessage.Message);

            var clients           = clientRepository.Where(c => c.IsActive);
            var dayOfExecution    = serverTime.RequestStarted.Date;
            var dayAfterExecution = serverTime.RequestStarted.AddDays(1).Date;
            var addedTask         = new List <InsideModel.Models.Task>();
            var taskNum           = 0;

            foreach (var client in clients)
            {
                if (client.AnalyticsTableId.IsNullOrWhiteSpace())
                {
                    continue;
                }

                var messageToAdd =
                    JsonConvert.SerializeObject(new ImportContactProductAnalyticDataTaskMessage()
                {
                    ClientId  = client.Id,
                    StartDate = createProductAnalyticTask.StartDate,
                    EndDate   = createProductAnalyticTask.EndDate
                });

                if (!taskManager.HasTaskInRepository(messageToAdd, TaskType.AddProductAnalyticData, dayOfExecution,
                                                     dayAfterExecution))
                {
                    taskNum++;
                    var earliestExecution = serverTime.RequestStarted + GetNextExecutionDelay(taskNum);;
                    var taskToAdd         = new InsideModel.Models.Task(messageToAdd, TaskType.AddProductAnalyticData, earliestExecution);
                    taskQueueStorage.Add(taskToAdd);
                }
            }
        }
Beispiel #7
0
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var createUpdatePhoneCallTask = JsonConvert.DeserializeObject <UpdatePhonecallsTaskMesage>(taskMessage.Message);

            var clients = clientRepository.Where(c => c.IsActive && c.CallTrackingMetricId != null);
            var dayOfExecutionLowerBound = serverTime.RequestStarted.Date;
            var dayOfExecutionUpperBound = serverTime.RequestStarted.AddDays(1).Date;
            var addedTask = new List <InsideModel.Models.Task>();

            foreach (var client in clients)
            {
                var messageToAdd =
                    JsonConvert.SerializeObject(new UpdatePhonecallsForClientsTaskMessage
                {
                    ClientId  = client.Id,
                    StartDate = createUpdatePhoneCallTask.StartDate,
                    EndDate   = createUpdatePhoneCallTask.EndDate
                });

                if (!taskManager.HasTaskInRepository(messageToAdd, TaskType.UpdatePhonecalls, dayOfExecutionLowerBound,
                                                     dayOfExecutionUpperBound))
                {
                    var taskToAdd = new InsideModel.Models.Task(messageToAdd, TaskType.UpdatePhonecalls, serverTime.RequestStarted);
                    taskQueueStorage.Add(taskToAdd);
                }
            }
        }
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var contactProductTask =
                JsonConvert.DeserializeObject <ImportEventsTaskMessage>(taskMessage.Message);

            customEventsExtractor.ImportEvents(contactProductTask.ClientId, contactProductTask.StartDate, contactProductTask.EndDate);
        }
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var sendEmailTask = JsonConvert.DeserializeObject <NotificationTaskMessage>(taskMessage.Message);

            var contactId = sendEmailTask.ContactId;
            var contactNotificationToSend = contactRepository.Where(c => c.Id == contactId)
                                            .Include(l => l.Client);

            if (!contactNotificationToSend.Any())
            {
                return;
            }
            var client = contactNotificationToSend.First().Client;

            if (!client.IsActive)
            {
                return;
            }
            if (!client.Labels.Where(l => l.Name == "Helloypaket").Any())
            {
                return;
            }

            var notificationText = notificationPhoneTextBuilder.GetDefinition(contactId);

            phoneNotificationSender.SendNotification(client.Id, notificationText);
        }
 private void PerformTask(InsideModel.Models.Task taskToPerform)
 {
     if (taskToPerform.Type == TaskType.CreateTaskForUsersToSendNewContactEmailNotification)
     {
         _notificationEmailSender.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.SendNewContactPhoneNotification)
     {
         phoneNotificationTaskPerformer.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.AddProductAnalyticData)
     {
         addAnalyticProductDataForClient.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.CreateAnalyticDataTasksForClients)
     {
         createAnalyticDataTasksForClients.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.ImportCustomEvents)
     {
         customEventsImporter.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.ImportSeoData)
     {
         seoDataImporter.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.SendNewContactEmailNotificationToUser)
     {
         userEmailSender.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.ImportCustomEventsTaskCreator)
     {
         importCustomEventsTaskCreator.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.RemoveExpiredTokens)
     {
         removeExpiredTokens.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.CreateUpdatePhonecallsTasksForClients)
     {
         updatePhonecallsTaskCreator.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.UpdatePhonecalls)
     {
         updatePhonecalls.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.CreateTaskForUsersToSendNewContactSmsNotification)
     {
         smsNotificationTaskCreator.PerformTask(taskToPerform);
     }
     else if (taskToPerform.Type == TaskType.SendNewContactSmsNotificationToUser)
     {
         userSmsNotificationTaskPerformer.PerformTask(taskToPerform);
     }
     else
     {
         throw new Exception("Unknown task type: " + taskToPerform.Type);
     }
 }
Beispiel #11
0
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var contactProductTask =
                JsonConvert.DeserializeObject <ImportContactProductAnalyticDataTaskMessage>(taskMessage.Message);

            analyticsDataExtractor.UpdateContact(contactProductTask.ClientId, contactProductTask.StartDate,
                                                 contactProductTask.EndDate);
        }
Beispiel #12
0
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var sendSmsToUserTask = JsonConvert.DeserializeObject <UserSpecificSmsNotificationTaskMessage>(taskMessage.Message);
            var user      = userRepository.Single(u => u.Id == sendSmsToUserTask.UserId);
            var defintion = smsDefinitionBuilder.GetDefinition(sendSmsToUserTask.ContactId, sendSmsToUserTask.UserId);

            if (defintion != null)
            {
                smsSender.SendSms(user.Phone, defintion);
            }
        }
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var sendEmailToUserTask = JsonConvert.DeserializeObject <UserSpecificNotificationTaskMessage>(taskMessage.Message);

            var defintion = notificationEmailDefinitionBuilder.GetDefinition(sendEmailToUserTask.ContactId, sendEmailToUserTask.UserId);

            if (defintion != null)
            {
                SendEmail(defintion);
            }
        }
        public void CanCreateTaskForActiveClientsWithAnalyticId()
        {
            var clientRepository = new LocalRepository <Client>();
            var taskQueueStorage = new Mock <ITaskQueueStorage>();
            var taskRepository   = new LocalRepository <InsideModel.Models.Task>();
            var serverTime       = new Mock <IServerTime>();
            var taskManagere     = new Mock <ITaskManager>();

            var task = new CreateAnalyticDataTasksForClients(
                clientRepository,
                taskQueueStorage.Object,
                taskRepository,
                serverTime.Object, taskManagere.Object);

            var client1 = new Client()
            {
                Id               = 1,
                IsActive         = true,
                AnalyticsTableId = "SomeId"
            };

            var client2 = new Client()
            {
                Id               = 2,
                IsActive         = true,
                AnalyticsTableId = "SomeId"
            };

            clientRepository.Add(client1);
            clientRepository.Add(client2);

            var taskExecutionDate = new DateTime(2014, 01, 01);

            serverTime.Setup(st => st.RequestStarted).Returns(taskExecutionDate);

            var taskMessage = "{\"StartDate\":\"2013-12-30\",\"EndDate\":\"2014-01-02\"}";
            var message     = new InsideModel.Models.Task()
            {
                Message = taskMessage
            };

            task.PerformTask(message);

            //Assert.AreEqual(2, taskRepository.All().Count());
            taskQueueStorage.Verify(ts => ts.Add(It.Is <InsideModel.Models.Task>(t => t.Message == "{\"ClientId\":1,\"StartDate\":\"2013-12-30T00:00:00\",\"EndDate\":\"2014-01-02T00:00:00\"}" && t.Type == "AddProductAnalyticData")), Times.Exactly(1));
            taskQueueStorage.Verify(ts => ts.Add(It.Is <InsideModel.Models.Task>(t => t.Message == "{\"ClientId\":2,\"StartDate\":\"2013-12-30T00:00:00\",\"EndDate\":\"2014-01-02T00:00:00\"}" && t.Type == "AddProductAnalyticData")), Times.Exactly(1));
        }
Beispiel #15
0
        public void ContactInDbDoesNotAddContactModifiesState()
        {
            var clientRepository     = new LocalRepository <Client>();
            var externalDataProvider = new Mock <IExternalDataProvider>();
            var contactRepository    = new LocalRepository <Contact>();
            var contactAutoRating    = new Mock <IContactAutoRating>();

            clientRepository.Add(ModelHelper.TestClient1AllDataNoReferences);

            var contactProperty = new ContactProperty("CTMId", "1");
            var contact         = new Contact()
            {
                Id       = 1,
                ClientId = 1
            };

            contact.Property.Add(contactProperty);
            contactRepository.Add(contact);

            var startDate = new DateTime(2014, 01, 01);
            var endDate   = new DateTime(2014, 02, 01);

            externalDataProvider.Setup(x => x.GetPhoneData(1, startDate, endDate)).Returns("{\"calls\":[{\"id\": 1,\"account_id\":1}, {\"id\": 2,\"account_id\":1}],\"next_page\":null,\"previous_page\":null,\"total_pages\":1,\"page\":1}");

            var task = new UpdatePhonecalls(
                clientRepository,
                contactRepository,
                externalDataProvider.Object,
                contactAutoRating.Object);

            var taskMessage = "{\"ClientId\":1,\"StartDate\":\"2014-01-01T00:00:00\",\"EndDate\":\"2014-02-01T00:00:00\"}";
            var message     = new InsideModel.Models.Task()
            {
                Message = taskMessage
            };

            task.PerformTask(message);

            externalDataProvider.Verify(x => x.MapPhoneDataToContact(It.IsAny <CallTrackingMetricsWebhookData>()), Times.Once);
            externalDataProvider.Verify(x => x.MapPhoneDataToContact(It.IsAny <CallTrackingMetricsWebhookData>(), It.IsAny <Contact>()), Times.Once);

            Assert.AreEqual(2, contactRepository.All().Count());
        }
        public void NotifyClientsForNewContactWithPhoneNotification(int contactId)
        {
            var addedTask    = new List <InsideModel.Models.Task>();
            var messageToAdd =
                JsonConvert.SerializeObject(new NewContactTaskMessage()
            {
                ContactId = contactId
            });

            var dayOfExecution      = serverTime.RequestStarted;
            var hasTaskInRepository = taskRepository.Where(tr => tr.Message == messageToAdd &&
                                                           dayOfExecution == tr.EarliestExecution &&
                                                           tr.Type == TaskType.SendNewContactPhoneNotification).Any();

            if (!hasTaskInRepository)
            {
                var taskToAdd = new InsideModel.Models.Task(messageToAdd, TaskType.SendNewContactPhoneNotification,
                                                            serverTime.RequestStarted);
                taskQueueStorage.Add(taskToAdd);
            }
        }
Beispiel #17
0
        public void NoTaskCreatedForInactiveClientsOrClientsWithNoTrackingId()
        {
            var clientRepository = new LocalRepository <Client>();
            var taskQueueStorage = new Mock <ITaskQueueStorage>();
            var taskRepository   = new LocalRepository <InsideModel.Models.Task>();
            var serverTime       = new Mock <IServerTime>();
            var taskManager      = new Mock <ITaskManager>();

            var task = new CreateUpdatePhonecallsTasksForClients(
                clientRepository,
                taskQueueStorage.Object,
                taskRepository,
                serverTime.Object,
                taskManager.Object);

            clientRepository.Add(new Client()
            {
                IsActive             = false,
                CallTrackingMetricId = 1
            });
            clientRepository.Add(new Client()
            {
                IsActive = true,
            });

            var taskExecutionDate = new DateTime(2014, 01, 01);

            serverTime.Setup(st => st.RequestStarted).Returns(taskExecutionDate);

            var taskMessage = "{\"StartDate\":\"2014-01-01\",\"EndDate\":\"2014-02-01\"}";
            var message     = new InsideModel.Models.Task()
            {
                Message = taskMessage
            };

            task.PerformTask(message);

            Assert.AreEqual(0, taskRepository.All().Count());
            taskQueueStorage.Verify(ts => ts.Add(It.IsAny <InsideModel.Models.Task>()), Times.Never);
        }
 private bool IsTaskToTry(InsideModel.Models.Task taskToCheck)
 {
     if (taskToCheck.NumTries <= 0)
     {
         return(true);
     }
     if (taskToCheck.Type == TaskType.AddProductAnalyticData)
     {
         if (taskToCheck.NumTries >= 3)
         {
             return(false);
         }
         else
         {
             return(true);
         }
     }
     else
     {
         return(false);
     }
 }
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var dayOfExecutionLowerBound = serverTime.RequestStarted.Date;
            var dayOfExecutionUpperBound = dayOfExecutionLowerBound.AddDays(1);

            var clientsForImporting =
                clientRepository.Where(cr => cr.IsActive && cr.Labels.Any(l => l.Name == "Custom Event")).ToList();
            var addedTask = new List <InsideModel.Models.Task>();

            foreach (var client in clientsForImporting)
            {
                if (client.AnalyticsTableId.IsNullOrWhiteSpace())
                {
                    continue;
                }

                var endDate   = serverTime.RequestStarted;
                var startDate = endDate.AddDays(-3);
                var clientId  = client.Id;
                var createTaskForImportingWebEvents = new ImportEventsTaskMessage()
                {
                    ClientId  = clientId,
                    StartDate = startDate.Date,
                    EndDate   = endDate.Date
                };
                var messageToAdd = JsonConvert.SerializeObject(createTaskForImportingWebEvents);

                if (!taskManager.HasTaskInRepository(messageToAdd, TaskType.ImportCustomEvents,
                                                     dayOfExecutionLowerBound, dayOfExecutionUpperBound))
                {
                    var taskToAdd = new InsideModel.Models.Task(messageToAdd, TaskType.ImportCustomEvents, serverTime.RequestStarted);
                    taskQueueStorage.Add(taskToAdd);
                }
                else
                {
                    throw  new Exception("Task Already in Database: " + messageToAdd);
                }
            }
        }
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var sendSmsTask = JsonConvert.DeserializeObject <SmsNotificationTaskMessage>(taskMessage.Message);

            if (!IsContactValidToSend(sendSmsTask.ContactId))
            {
                return;
            }
            var users =
                contactRepository.First(c => c.Id == sendSmsTask.ContactId)
                .Client.InsideUserSets.Where(u => u.ReceiveSms != null && (bool)u.ReceiveSms && !string.IsNullOrEmpty(u.Phone)).ToList();

            if (!users.Any())
            {
                return;
            }

            var dayOfExecution    = serverTime.RequestStarted.Date;
            var dayAfterExecution = serverTime.RequestStarted.AddDays(1).Date;
            var addedTask         = new List <InsideModel.Models.Task>();

            foreach (var insideUser in users)
            {
                var createTaskForUserSpecificNotification = new UserSpecificSmsNotificationTaskMessage()
                {
                    ContactId = sendSmsTask.ContactId,
                    UserId    = insideUser.Id
                };
                var messageToAdd = JsonConvert.SerializeObject(createTaskForUserSpecificNotification);

                if (!taskManager.HasTaskInRepository(messageToAdd, TaskType.SendNewContactSmsNotificationToUser, dayOfExecution,
                                                     dayAfterExecution))
                {
                    var taskToAdd = new InsideModel.Models.Task(messageToAdd, TaskType.SendNewContactSmsNotificationToUser, serverTime.RequestStarted);
                    taskQueueStorage.Add(taskToAdd);
                }
            }
        }
        public ActionResult Create(string type)
        {
            if (type == "CreateAnalyticDataTasksForClients")
            {
                var endDate   = serverTime.RequestStarted;
                var startDate = endDate.AddDays(-2);
                var createTaskForProductAnalyticTaskMessage = new TaskMessageWithStartDateAndEndDate()
                {
                    StartDate = startDate.Date,
                    EndDate   = endDate.Date
                };
                var messageToAdd = JsonConvert.SerializeObject(createTaskForProductAnalyticTaskMessage);

                var dayOfExecutionLowerBound = serverTime.RequestStarted.Date;
                var dayOfExecutionUpperBound = dayOfExecutionLowerBound.AddDays(1);

                if (!taskManager.HasTaskInRepository(messageToAdd, TaskType.CreateAnalyticDataTasksForClients,
                                                     dayOfExecutionLowerBound, dayOfExecutionUpperBound))
                {
                    var taskToAdd = new InsideModel.Models.Task(messageToAdd, TaskType.CreateAnalyticDataTasksForClients, serverTime.RequestStarted);
                    taskQueueStorage.Add(taskToAdd);
                    return
                        (Content("Successfully Created task: CreateAnalyticDataTasksForClients"));
                }
                else
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Task Already in Database: " + messageToAdd));
                }
            }
            else if (type == "ImportCustomEvents")
            {
                var dayOfExecutionLowerBound = serverTime.RequestStarted.Date;
                var dayOfExecutionUpperBound = dayOfExecutionLowerBound.AddDays(1);
                var messageToAdd             = "";

                if (!taskManager.HasTaskInRepository(messageToAdd, TaskType.ImportCustomEventsTaskCreator,
                                                     dayOfExecutionLowerBound, dayOfExecutionUpperBound))
                {
                    var taskToAdd = new InsideModel.Models.Task(messageToAdd, TaskType.ImportCustomEventsTaskCreator, serverTime.RequestStarted);
                    taskQueueStorage.Add(taskToAdd);
                }
                else
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Task Already in Database"));
                }
                return
                    (Content("Successfully Created task: ImportCustomEventsTaskCreator"));
            }
            else if (type == "ImportSeoData")
            {
                var dayOfExecutionLowerBound = serverTime.RequestStarted.Date;
                var dayOfExecutionUpperBound = dayOfExecutionLowerBound.AddDays(1);
                var messageToAdd             = "";

                if (!taskManager.HasTaskInRepository(messageToAdd, TaskType.ImportSeoData,
                                                     dayOfExecutionLowerBound, dayOfExecutionUpperBound))
                {
                    var taskToAdd = new InsideModel.Models.Task(messageToAdd, TaskType.ImportSeoData, serverTime.RequestStarted);
                    taskQueueStorage.Add(taskToAdd);

                    return
                        (Content("Successfully Created task: ImportSeoData"));
                }
                else
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Task Already in Database"));
                }
            }
            else if (type == "RemoveExpiredTokens")
            {
                var dayOfExecutionLowerBound = serverTime.RequestStarted.Date;
                var dayOfExecutionUpperBound = dayOfExecutionLowerBound.AddDays(1);
                var messageToAdd             = "";

                if (!taskManager.HasTaskInRepository(messageToAdd, TaskType.RemoveExpiredTokens,
                                                     dayOfExecutionLowerBound, dayOfExecutionUpperBound))
                {
                    var taskToAdd = new InsideModel.Models.Task(messageToAdd, TaskType.RemoveExpiredTokens, serverTime.RequestStarted);
                    taskQueueStorage.Add(taskToAdd);

                    return
                        (Content("Successfully Created task: RemoveExpiredTokens"));
                }
                else
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Task Already in Database"));
                }
            }
            else if (type == "UpdatePhoneCalls")
            {
                var endDate   = serverTime.RequestStarted;
                var startDate = endDate.AddDays(-10);
                var createTaskForUpdatePhoneCallsTaskMessage = new UpdatePhonecallsTaskMesage()
                {
                    StartDate = startDate.Date,
                    EndDate   = endDate.Date
                };
                var messageToAdd = JsonConvert.SerializeObject(createTaskForUpdatePhoneCallsTaskMessage);

                var dayOfExecutionLowerBound = serverTime.RequestStarted.Date;
                var dayOfExecutionUpperBound = dayOfExecutionLowerBound.AddDays(1);

                if (!taskManager.HasTaskInRepository(messageToAdd, TaskType.CreateUpdatePhonecallsTasksForClients,
                                                     dayOfExecutionLowerBound, dayOfExecutionUpperBound))
                {
                    var taskToAdd = new InsideModel.Models.Task(messageToAdd, TaskType.CreateUpdatePhonecallsTasksForClients, serverTime.RequestStarted);
                    taskQueueStorage.Add(taskToAdd);

                    return
                        (Content("Successfully Created task: CreateUpdatePhonecallsTasksForClients"));
                }
                else
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Task Already in Database: " + messageToAdd));
                }
            }
            else
            {
                HttpContext.Response.StatusDescription = "BadRequest";
                HttpContext.Response.StatusCode        = 400;
                return(Content("No Task Created"));
            }
        }
Beispiel #22
0
        public void PerformTask(InsideModel.Models.Task taskMessage)
        {
            var updatePhoneCallsMessage =
                JsonConvert.DeserializeObject <UpdatePhonecallsForClientsTaskMessage>(taskMessage.Message);

            var callTrackingMetricsId =
                clientRepository.Single(c => c.Id == updatePhoneCallsMessage.ClientId).CallTrackingMetricId;

            if (callTrackingMetricsId == null)
            {
                throw new Exception("No Call tracking metrics Id found for client:" + updatePhoneCallsMessage.ClientId);
            }

            string  pageUrl = null;
            CtmData phoneData;

            do
            {
                string phoneDataString;
                if (pageUrl == null)
                {
                    phoneDataString = externalDataProvider.GetPhoneData((int)callTrackingMetricsId,
                                                                        updatePhoneCallsMessage.StartDate, updatePhoneCallsMessage.EndDate);
                }
                else
                {
                    phoneDataString = externalDataProvider.GetPhoneData(pageUrl);
                }

                if (phoneDataString.IsNullOrWhiteSpace())
                {
                    return;
                }

                phoneData = JsonConvert.DeserializeObject <CtmData>(phoneDataString);
                foreach (var call in phoneData.calls)
                {
                    var hasCallInDb = contactRepository.Where(l => l.Property.Any(lp => lp.Type == "CTMId" && lp.Value == call.id.ToString())).Any();

                    if (hasCallInDb)
                    {
                        var contactToUpdate =
                            contactRepository.Single(
                                l => l.Property.Any(lp => lp.Type == "CTMId" && lp.Value == call.id.ToString()));


                        externalDataProvider.MapPhoneDataToContact(call, contactToUpdate);
                        contactAutoRating.SetAutoRating(contactToUpdate);
                    }
                    else
                    {
                        var hasMatchingClient = clientRepository.Where(c => c.CallTrackingMetricId == call.account_id).Any();
                        if (!hasMatchingClient)
                        {
                            throw new Exception("Recived ctm webhook data. Found no matching client for given account id: " + call.account_id);
                        }
                        var contact = externalDataProvider.MapPhoneDataToContact(call);
                        contactAutoRating.SetAutoRating(contact);
                        contactRepository.Add(contact);
                    }
                }
                contactRepository.SaveChanges();
                pageUrl = phoneData.next_page;
            } while (!phoneData.next_page.IsNullOrWhiteSpace());
        }
 public void PerformTask(InsideModel.Models.Task taskMessage)
 {
     accessTokenProvider.RemoveExpired();
     Console.WriteLine("Finished Cleaning");
 }