From b4c01ad326cd4ecedd5f35324b086e0b31d770c7 Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Fri, 22 Jan 2021 21:05:01 -0500 Subject: [PATCH] save last sync --- src/BirdsiteLive/Services/FederationService.cs | 2 +- .../DataAccessLayers/TwitterUserPostgresDal.cs | 9 +++++---- .../BirdsiteLive.DAL/Contracts/ITwitterUserDal.cs | 5 +++-- .../BirdsiteLive.DAL/DatabaseInitializer.cs | 4 ++-- .../DataAccessLayers/CachedTweetsPostgresDalTests.cs | 3 ++- .../DataAccessLayers/FollowersPostgresDalTests.cs | 3 ++- .../DataAccessLayers/TwitterUserPostgresDalTests.cs | 7 +++++-- .../BirdsiteLive.DAL.Tests/DatabaseInitializerTests.cs | 10 +++++----- 8 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/BirdsiteLive/Services/FederationService.cs b/src/BirdsiteLive/Services/FederationService.cs index 6835fd4..9acab41 100644 --- a/src/BirdsiteLive/Services/FederationService.cs +++ b/src/BirdsiteLive/Services/FederationService.cs @@ -24,7 +24,7 @@ namespace BirdsiteLive.Services protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - await _databaseInitializer.DbInitAsync(); + await _databaseInitializer.InitAndMigrateDbAsync(); await _statusPublicationPipeline.ExecuteAsync(stoppingToken); } } diff --git a/src/DataAccessLayers/BirdsiteLive.DAL.Postgres/DataAccessLayers/TwitterUserPostgresDal.cs b/src/DataAccessLayers/BirdsiteLive.DAL.Postgres/DataAccessLayers/TwitterUserPostgresDal.cs index 082229a..0cb811f 100644 --- a/src/DataAccessLayers/BirdsiteLive.DAL.Postgres/DataAccessLayers/TwitterUserPostgresDal.cs +++ b/src/DataAccessLayers/BirdsiteLive.DAL.Postgres/DataAccessLayers/TwitterUserPostgresDal.cs @@ -75,19 +75,20 @@ namespace BirdsiteLive.DAL.Postgres.DataAccessLayers } } - public async Task UpdateTwitterUserAsync(int id, long lastTweetPostedId, long lastTweetSynchronizedForAllFollowersId) + public async Task UpdateTwitterUserAsync(int id, long lastTweetPostedId, long lastTweetSynchronizedForAllFollowersId, DateTime lastSync) { if(id == default) throw new ArgumentException("id"); if(lastTweetPostedId == default) throw new ArgumentException("lastTweetPostedId"); if(lastTweetSynchronizedForAllFollowersId == default) throw new ArgumentException("lastTweetSynchronizedForAllFollowersId"); - - var query = $"UPDATE {_settings.TwitterUserTableName} SET lastTweetPostedId = @lastTweetPostedId, lastTweetSynchronizedForAllFollowersId = @lastTweetSynchronizedForAllFollowersId WHERE id = @id"; + if(lastSync == default) throw new ArgumentException("lastSync"); + + var query = $"UPDATE {_settings.TwitterUserTableName} SET lastTweetPostedId = @lastTweetPostedId, lastTweetSynchronizedForAllFollowersId = @lastTweetSynchronizedForAllFollowersId, lastSync = @lastSync WHERE id = @id"; using (var dbConnection = Connection) { dbConnection.Open(); - await dbConnection.QueryAsync(query, new { id, lastTweetPostedId, lastTweetSynchronizedForAllFollowersId }); + await dbConnection.QueryAsync(query, new { id, lastTweetPostedId, lastTweetSynchronizedForAllFollowersId, lastSync = lastSync.ToUniversalTime() }); } } diff --git a/src/DataAccessLayers/BirdsiteLive.DAL/Contracts/ITwitterUserDal.cs b/src/DataAccessLayers/BirdsiteLive.DAL/Contracts/ITwitterUserDal.cs index 48d5661..65d9697 100644 --- a/src/DataAccessLayers/BirdsiteLive.DAL/Contracts/ITwitterUserDal.cs +++ b/src/DataAccessLayers/BirdsiteLive.DAL/Contracts/ITwitterUserDal.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using BirdsiteLive.DAL.Models; namespace BirdsiteLive.DAL.Contracts @@ -8,7 +9,7 @@ namespace BirdsiteLive.DAL.Contracts Task CreateTwitterUserAsync(string acct, long lastTweetPostedId); Task GetTwitterUserAsync(string acct); Task GetAllTwitterUsersAsync(); - Task UpdateTwitterUserAsync(int id, long lastTweetPostedId, long lastTweetSynchronizedForAllFollowersId); + Task UpdateTwitterUserAsync(int id, long lastTweetPostedId, long lastTweetSynchronizedForAllFollowersId, DateTime lastSync); Task DeleteTwitterUserAsync(string acct); Task GetTwitterUsersCountAsync(); } diff --git a/src/DataAccessLayers/BirdsiteLive.DAL/DatabaseInitializer.cs b/src/DataAccessLayers/BirdsiteLive.DAL/DatabaseInitializer.cs index 4fe24df..2a5f60d 100644 --- a/src/DataAccessLayers/BirdsiteLive.DAL/DatabaseInitializer.cs +++ b/src/DataAccessLayers/BirdsiteLive.DAL/DatabaseInitializer.cs @@ -7,7 +7,7 @@ namespace BirdsiteLive.DAL { public interface IDatabaseInitializer { - Task DbInitAsync(); + Task InitAndMigrateDbAsync(); } public class DatabaseInitializer : IDatabaseInitializer @@ -21,7 +21,7 @@ namespace BirdsiteLive.DAL } #endregion - public async Task DbInitAsync() + public async Task InitAndMigrateDbAsync() { var currentVersion = await _dbInitializerDal.GetCurrentDbVersionAsync(); var mandatoryVersion = _dbInitializerDal.GetMandatoryDbVersion(); diff --git a/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/CachedTweetsPostgresDalTests.cs b/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/CachedTweetsPostgresDalTests.cs index 021784e..f173685 100644 --- a/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/CachedTweetsPostgresDalTests.cs +++ b/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/CachedTweetsPostgresDalTests.cs @@ -14,7 +14,8 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers public async Task TestInit() { var dal = new DbInitializerPostgresDal(_settings, _tools); - await dal.InitDbAsync(); + var init = new DatabaseInitializer(dal); + await init.InitAndMigrateDbAsync(); } [TestCleanup] diff --git a/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/FollowersPostgresDalTests.cs b/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/FollowersPostgresDalTests.cs index cd6162d..b2289c4 100644 --- a/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/FollowersPostgresDalTests.cs +++ b/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/FollowersPostgresDalTests.cs @@ -16,7 +16,8 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers public async Task TestInit() { var dal = new DbInitializerPostgresDal(_settings, _tools); - await dal.InitDbAsync(); + var init = new DatabaseInitializer(dal); + await init.InitAndMigrateDbAsync(); } [TestCleanup] diff --git a/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/TwitterUserPostgresDalTests.cs b/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/TwitterUserPostgresDalTests.cs index f900c8f..5fa600c 100644 --- a/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/TwitterUserPostgresDalTests.cs +++ b/src/Tests/BirdsiteLive.DAL.Postgres.Tests/DataAccessLayers/TwitterUserPostgresDalTests.cs @@ -14,7 +14,8 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers public async Task TestInit() { var dal = new DbInitializerPostgresDal(_settings, _tools); - await dal.InitDbAsync(); + var init = new DatabaseInitializer(dal); + await init.InitAndMigrateDbAsync(); } [TestCleanup] @@ -70,13 +71,15 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers var updatedLastTweetId = 1600L; var updatedLastSyncId = 1550L; - await dal.UpdateTwitterUserAsync(result.Id, updatedLastTweetId, updatedLastSyncId); + var now = DateTime.Now; + await dal.UpdateTwitterUserAsync(result.Id, updatedLastTweetId, updatedLastSyncId, now); result = await dal.GetTwitterUserAsync(acct); Assert.AreEqual(acct, result.Acct); Assert.AreEqual(updatedLastTweetId, result.LastTweetPostedId); Assert.AreEqual(updatedLastSyncId, result.LastTweetSynchronizedForAllFollowersId); + Assert.IsTrue(Math.Abs((now.ToUniversalTime() - result.LastSync).Milliseconds) < 100); } [TestMethod] diff --git a/src/Tests/BirdsiteLive.DAL.Tests/DatabaseInitializerTests.cs b/src/Tests/BirdsiteLive.DAL.Tests/DatabaseInitializerTests.cs index bd847d2..ba11321 100644 --- a/src/Tests/BirdsiteLive.DAL.Tests/DatabaseInitializerTests.cs +++ b/src/Tests/BirdsiteLive.DAL.Tests/DatabaseInitializerTests.cs @@ -31,7 +31,7 @@ namespace BirdsiteLive.DAL.Tests #endregion var dbInitializer = new DatabaseInitializer(dbInitializerDal.Object); - await dbInitializer.DbInitAsync(); + await dbInitializer.InitAndMigrateDbAsync(); #region Validations dbInitializerDal.VerifyAll(); @@ -69,7 +69,7 @@ namespace BirdsiteLive.DAL.Tests #endregion var dbInitializer = new DatabaseInitializer(dbInitializerDal.Object); - await dbInitializer.DbInitAsync(); + await dbInitializer.InitAndMigrateDbAsync(); #region Validations dbInitializerDal.VerifyAll(); @@ -122,7 +122,7 @@ namespace BirdsiteLive.DAL.Tests #endregion var dbInitializer = new DatabaseInitializer(dbInitializerDal.Object); - await dbInitializer.DbInitAsync(); + await dbInitializer.InitAndMigrateDbAsync(); #region Validations dbInitializerDal.VerifyAll(); @@ -171,7 +171,7 @@ namespace BirdsiteLive.DAL.Tests #endregion var dbInitializer = new DatabaseInitializer(dbInitializerDal.Object); - await dbInitializer.DbInitAsync(); + await dbInitializer.InitAndMigrateDbAsync(); #region Validations dbInitializerDal.VerifyAll(); @@ -227,7 +227,7 @@ namespace BirdsiteLive.DAL.Tests var dbInitializer = new DatabaseInitializer(dbInitializerDal.Object); try { - await dbInitializer.DbInitAsync(); + await dbInitializer.InitAndMigrateDbAsync(); } finally {