public async Task Run([CosmosDBTrigger(
                                   databaseName: "TwitterBotDB",
                                   collectionName: "TweetCollection",
                                   ConnectionStringSetting = "CosmosDB:ConnectionString",
                                   LeaseCollectionName = "leases",
                                   CreateLeaseCollectionIfNotExists = true)] IReadOnlyList <Document> documents,
                              [SignalR(
                                   HubName = "TweetNotificationsHub",
                                   ConnectionStringSetting = "SignalR:ConnectionString")] IAsyncCollector <SignalRMessage> messages,
                              ILogger log)
        {
            log.LogInformation("Documents modified " + documents.Count);

            foreach (var document in documents)
            {
                var tweet = await _tweetRepository.GetByIdAsync(document.Id);

                var users = _userRepository.GetUsersByHashtags(tweet.Hashtags.Select(p => p.Text).ToArray());

                foreach (var user in users)
                {
                    await messages.AddAsync(new SignalRMessage
                    {
                        UserId    = user.Id,
                        Target    = "updateTweets",
                        Arguments = new[] { tweet }
                    });
                }
            }

            await messages.FlushAsync();
        }
예제 #2
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);
            }
        }
예제 #3
0
 //Read
 public async Task <Person> ReadPerson(Person person)
 {
     return(await _personRepo.GetByIdAsync(person.Id));
 }