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(); }
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); } }
//Read public async Task <Person> ReadPerson(Person person) { return(await _personRepo.GetByIdAsync(person.Id)); }