示例#1
0
        public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
        {
            var hashTagMessagess = await _serviceBusOperations.ReceiveMessagesAsync();

            var hashTags        = hashTagMessagess.Select(p => JsonConvert.DeserializeObject <Hashtag>(Encoding.UTF8.GetString(p.Body)));
            var erroredHashtags = new List <Hashtag>();

            foreach (var hashTag in hashTags)
            {
                try
                {
                    var tweet = _tweetOperations.GetPopularTweetByHashtag(hashTag);

                    if (tweet != null)
                    {
                        tweet.Hashtags = new List <Hashtag>();
                        log.LogInformation($"Latest popular tweet for {hashTag.Text} : {tweet.FullText}");

                        var existingTweet = await _tweetDbRepository.GetByIdAsync(tweet.Id);

                        if (existingTweet is null)
                        {
                            tweet.Hashtags.Add(hashTag);
                            await _tweetDbRepository.AddOrUpdateAsync(tweet);

                            log.LogInformation($"Added Tweet in TweetCollection with Id: { tweet.Id }");
                        }

                        if (existingTweet != null && !existingTweet.Hashtags.Any(p => p.Text == hashTag.Text))
                        {
                            tweet.Hashtags = existingTweet.Hashtags;
                            tweet.Hashtags.Add(hashTag);

                            await _tweetDbRepository.AddOrUpdateAsync(tweet);

                            log.LogInformation($"Updated Tweet in TweetCollection with Id: { tweet.Id }");
                        }
                    }

                    hashTag.IsCurrentlyInQueue = false;
                    hashTag.LastSyncedDateTime = DateTime.UtcNow;

                    await _hashtagDbRepository.AddOrUpdateAsync(hashTag);
                }
                catch (Exception ex)
                {
                    log.LogError(ex, ex.Message);
                    erroredHashtags.Add(hashTag);
                }
            }

            if (erroredHashtags.Any())
            {
                throw new TwitterBotBusinessException(erroredHashtags);
            }
        }
示例#2
0
        public async Task ProcessWords(string incoming)
        {
            Debug.WriteLine($"Adding { incoming } to DB");

            var words = new WordsData()
            {
                Id = Guid.NewGuid(), NumberOfChars = incoming.Length, ReceivedWords = incoming, DateTime = DateTime.Now
            };

            await _repository.AddOrUpdateAsync(words);
        }
示例#3
0
        //Work
        public async Task BodyOfWork()
        {
            WriteToConsoleAndPromptToContinue("Working on the DB commencing");

            //Adding
            foreach (var added in _added)
            {
                await _personRepo.AddOrUpdateAsync(added);
            }
            //Updating
            foreach (var updated in _updated)
            {
                await _personRepo.AddOrUpdateAsync(updated);
            }
            //Deleting
            foreach (var removed in _removed)
            {
                await _personRepo.RemoveAsync(removed.Id);
            }

            WriteToConsoleAndPromptToContinue("Work on DB complete");
        }
示例#4
0
        private async Task ProcessErroredHashtags(List <Hashtag> hashtags)
        {
            if (!hashtags.Any())
            {
                return;
            }

            foreach (var hashtag in hashtags)
            {
                hashtag.IsCurrentlyInQueue = false;
                await _hashTagRepository.AddOrUpdateAsync(hashtag);
            }
        }
        public async Task Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"TweetSchedulerFunction started executionat: { DateTime.Now}");
            var config = _configurations.Value.AppSettings;

            var hashTags = await _hashTagRepository.WhereAsync(p =>
                                                               (!p.IsCurrentlyInQueue && p.LastSyncedDateTime < DateTime.UtcNow.AddMinutes(config.HashtagSyncIntervalInMinutes)) ||
                                                               (p.IsCurrentlyInQueue && p.LastSyncedDateTime < DateTime.UtcNow.AddHours(config.HashtagQueueThresholdIntervalInHours)));

            foreach (var hashTag in hashTags)
            {
                await _serviceBusOperations.SendMessageAsync(hashTag.Id, JsonConvert.SerializeObject(hashTag));

                hashTag.IsCurrentlyInQueue = true;
                await _hashTagRepository.AddOrUpdateAsync(hashTag);
            }

            log.LogInformation($"TweetSchedulerFunction completed execution at: { DateTime.Now}");
        }
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("SaveUserPreferences started.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            var    user        = JsonConvert.DeserializeObject <User>(requestBody);

            var hashTags = user.Hashtags != null?user.Hashtags.Select(p => p.Text).ToList() : new List <string>();

            var dbHashtagQuery = await _hashTagRepository.WhereAsync(p => hashTags.Contains(p.Text));

            var dbHashtags = dbHashtagQuery.ToList();

            foreach (var hashtag in user.Hashtags)
            {
                if (dbHashtags.Any(p => p.Text == hashtag.Text))
                {
                    continue;
                }

                hashtag.IsCurrentlyInQueue = false;
                hashtag.LastSyncedDateTime = DateTime.UtcNow.AddMinutes(_configurations.Value.AppSettings.HashtagSyncIntervalInMinutes);
                await _hashTagRepository.AddOrUpdateAsync(hashtag);
            }

            var dbUserQuery = await _userRepository.WhereAsync(p => p.UserId == user.UserId);

            var users = dbUserQuery.ToList();

            if (users != null && users.Count() != 0)
            {
                user.Id = users.FirstOrDefault().Id;
            }

            await _userRepository.AddOrUpdateAsync(user);

            log.LogInformation("SaveUserPreferences completed.");
            return(new OkResult());
        }