public DiscordEmbed Build(CachedTweet tweet) { var polandTimeZone = TZConvert.GetTimeZoneInfo("Europe/Warsaw"); var createdAtWithKind = DateTime.SpecifyKind(tweet.CreatedAt, DateTimeKind.Unspecified); var createdAtUtc = TimeZoneInfo.ConvertTimeToUtc(createdAtWithKind, polandTimeZone); var date = createdAtUtc.ToString("F", CultureInfo.InvariantCulture); var embed = new DiscordEmbedBuilder { Title = $"{tweet.CreatedByDisplayName} - Twitter", Url = tweet.Url, Description = HttpUtility.HtmlDecode(tweet.FullText), Color = new DiscordColor(Constants.EmbedColor), ImageUrl = tweet.ImageUrl, Thumbnail = new DiscordEmbedBuilder.EmbedThumbnail { Url = tweet.AvatarUrl }, Footer = new DiscordEmbedBuilder.EmbedFooter { Text = $"{date} UTC" } }; return(embed); }
public async Task CreateAndDelete() { var id = 152L; var userId = 15; var tweet = new CachedTweet { UserId = userId, Id = id, Text = "text data", FullText = "full text data", CreatedAt = DateTime.UtcNow }; var dal = new CachedTweetsPostgresDal(_settings); await dal.CreateTweetAsync(id, userId, tweet); var result = await dal.GetTweetAsync(id); Assert.IsNotNull(result); await dal.DeleteTweetAsync(id); result = await dal.GetTweetAsync(id); Assert.IsNull(result); }
public void AddCachedTweets(IEnumerable <ITweetModel> tweets) { lock (locker) { foreach (var tweet in tweets) { #region cache tweets var entity = context.CachedTweets.FirstOrDefault(t => t.Id == tweet.Id); if (entity == null) { entity = new CachedTweet { Id = tweet.Id }; context.CachedTweets.InsertOnSubmit(entity); } entity.Data = SerializeObject(tweet); #endregion #region cache users var user = context.CachedUsers.FirstOrDefault(u => u.Id == tweet.User.ScreenName); if (user == null) { user = new CachedUser { Id = tweet.User.ScreenName }; context.CachedUsers.InsertOnSubmit(user); } user.Data = SerializeObject(tweet.User); #region retweet users if (tweet.RetweetedStatus != null && tweet.RetweetedStatus.User != null) { var origin = context.CachedUsers.FirstOrDefault(u => u.Id == tweet.RetweetedStatus.User.ScreenName); if (origin == null) { origin = new CachedUser { Id = tweet.RetweetedStatus.User.ScreenName }; context.CachedUsers.InsertOnSubmit(origin); } origin.Data = SerializeObject(tweet.RetweetedStatus.User); } #endregion #endregion } context.SubmitChanges(); } }
public async Task CreateTweetAsync(long tweetId, int userId, CachedTweet tweet) { if (tweetId == default) { throw new ArgumentException("tweetId"); } if (userId == default) { throw new ArgumentException("userId"); } var serializedData = JsonConvert.SerializeObject(tweet); using (var dbConnection = Connection) { dbConnection.Open(); await dbConnection.ExecuteAsync( $"INSERT INTO {_settings.CachedTweetsTableName} (id,twitterUserId,data) VALUES(@id,@twitterUserId,CAST(@data as json))", new { id = tweetId, twitterUserId = userId, data = serializedData }); } }