added inbox property for followers
This commit is contained in:
parent
5cd6279da8
commit
34bf9ff140
5 changed files with 27 additions and 14 deletions
|
@ -106,8 +106,9 @@ namespace BirdsiteLive.DAL.Postgres.DataAccessLayers
|
||||||
followings INTEGER[],
|
followings INTEGER[],
|
||||||
followingsSyncStatus JSONB,
|
followingsSyncStatus JSONB,
|
||||||
|
|
||||||
acct VARCHAR(50),
|
acct VARCHAR(50) NOT NULL,
|
||||||
host VARCHAR(253),
|
host VARCHAR(253) NOT NULL,
|
||||||
|
inboxUrl VARCHAR(2048) NOT NULL,
|
||||||
UNIQUE (acct, host)
|
UNIQUE (acct, host)
|
||||||
);";
|
);";
|
||||||
await _tools.ExecuteRequestAsync(createFollowers);
|
await _tools.ExecuteRequestAsync(createFollowers);
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace BirdsiteLive.DAL.Postgres.DataAccessLayers
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public async Task CreateFollowerAsync(string acct, string host, int[] followings, Dictionary<int, long> followingSyncStatus)
|
public async Task CreateFollowerAsync(string acct, string host, int[] followings, Dictionary<int, long> followingSyncStatus, string inboxUrl)
|
||||||
{
|
{
|
||||||
var serializedDic = JsonConvert.SerializeObject(followingSyncStatus);
|
var serializedDic = JsonConvert.SerializeObject(followingSyncStatus);
|
||||||
|
|
||||||
|
@ -32,8 +32,8 @@ namespace BirdsiteLive.DAL.Postgres.DataAccessLayers
|
||||||
dbConnection.Open();
|
dbConnection.Open();
|
||||||
|
|
||||||
await dbConnection.ExecuteAsync(
|
await dbConnection.ExecuteAsync(
|
||||||
$"INSERT INTO {_settings.FollowersTableName} (acct,host,followings,followingsSyncStatus) VALUES(@acct,@host,@followings, CAST(@followingsSyncStatus as json))",
|
$"INSERT INTO {_settings.FollowersTableName} (acct,host,inboxUrl,followings,followingsSyncStatus) VALUES(@acct,@host,@inboxUrl,@followings,CAST(@followingsSyncStatus as json))",
|
||||||
new { acct, host, followings, followingsSyncStatus = serializedDic });
|
new { acct, host, inboxUrl, followings, followingsSyncStatus = serializedDic });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,6 +124,7 @@ namespace BirdsiteLive.DAL.Postgres.DataAccessLayers
|
||||||
Id = follower.Id,
|
Id = follower.Id,
|
||||||
Acct = follower.Acct,
|
Acct = follower.Acct,
|
||||||
Host = follower.Host,
|
Host = follower.Host,
|
||||||
|
InboxUrl = follower.InboxUrl,
|
||||||
Followings = follower.Followings,
|
Followings = follower.Followings,
|
||||||
FollowingsSyncStatus = JsonConvert.DeserializeObject<Dictionary<int,long>>(follower.FollowingsSyncStatus)
|
FollowingsSyncStatus = JsonConvert.DeserializeObject<Dictionary<int,long>>(follower.FollowingsSyncStatus)
|
||||||
};
|
};
|
||||||
|
@ -138,5 +139,6 @@ namespace BirdsiteLive.DAL.Postgres.DataAccessLayers
|
||||||
|
|
||||||
public string Acct { get; set; }
|
public string Acct { get; set; }
|
||||||
public string Host { get; set; }
|
public string Host { get; set; }
|
||||||
|
public string InboxUrl { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,7 +7,7 @@ namespace BirdsiteLive.DAL.Contracts
|
||||||
public interface IFollowersDal
|
public interface IFollowersDal
|
||||||
{
|
{
|
||||||
Task<Follower> GetFollowerAsync(string acct, string host);
|
Task<Follower> GetFollowerAsync(string acct, string host);
|
||||||
Task CreateFollowerAsync(string acct, string host, int[] followings, Dictionary<int, long> followingSyncStatus);
|
Task CreateFollowerAsync(string acct, string host, int[] followings, Dictionary<int, long> followingSyncStatus, string inboxUrl);
|
||||||
Task<Follower[]> GetFollowersAsync(int followedUserId);
|
Task<Follower[]> GetFollowersAsync(int followedUserId);
|
||||||
Task UpdateFollowerAsync(int id, int[] followings, Dictionary<int, long> followingSyncStatus);
|
Task UpdateFollowerAsync(int id, int[] followings, Dictionary<int, long> followingSyncStatus);
|
||||||
Task DeleteFollowerAsync(int id);
|
Task DeleteFollowerAsync(int id);
|
||||||
|
|
|
@ -11,5 +11,6 @@ namespace BirdsiteLive.DAL.Models
|
||||||
|
|
||||||
public string Acct { get; set; }
|
public string Acct { get; set; }
|
||||||
public string Host { get; set; }
|
public string Host { get; set; }
|
||||||
|
public string InboxUrl { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -45,15 +45,17 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers
|
||||||
{19, 166L},
|
{19, 166L},
|
||||||
{23, 167L}
|
{23, 167L}
|
||||||
};
|
};
|
||||||
|
var inboxUrl = "https://domain.ext/myhandle/inbox";
|
||||||
|
|
||||||
var dal = new FollowersPostgresDal(_settings);
|
var dal = new FollowersPostgresDal(_settings);
|
||||||
await dal.CreateFollowerAsync(acct, host, following, followingSync);
|
await dal.CreateFollowerAsync(acct, host, following, followingSync, inboxUrl);
|
||||||
|
|
||||||
var result = await dal.GetFollowerAsync(acct, host);
|
var result = await dal.GetFollowerAsync(acct, host);
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
Assert.AreEqual(acct, result.Acct);
|
Assert.AreEqual(acct, result.Acct);
|
||||||
Assert.AreEqual(host, result.Host);
|
Assert.AreEqual(host, result.Host);
|
||||||
|
Assert.AreEqual(inboxUrl, result.InboxUrl);
|
||||||
Assert.AreEqual(following.Length, result.Followings.Length);
|
Assert.AreEqual(following.Length, result.Followings.Length);
|
||||||
Assert.AreEqual(following[0], result.Followings[0]);
|
Assert.AreEqual(following[0], result.Followings[0]);
|
||||||
Assert.AreEqual(followingSync.Count, result.FollowingsSyncStatus.Count);
|
Assert.AreEqual(followingSync.Count, result.FollowingsSyncStatus.Count);
|
||||||
|
@ -71,19 +73,22 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers
|
||||||
var host = "domain.ext";
|
var host = "domain.ext";
|
||||||
var following = new[] { 1,2,3 };
|
var following = new[] { 1,2,3 };
|
||||||
var followingSync = new Dictionary<int, long>();
|
var followingSync = new Dictionary<int, long>();
|
||||||
await dal.CreateFollowerAsync(acct, host, following, followingSync);
|
var inboxUrl = "https://domain.ext/myhandle1/inbox";
|
||||||
|
await dal.CreateFollowerAsync(acct, host, following, followingSync, inboxUrl);
|
||||||
|
|
||||||
//User 2
|
//User 2
|
||||||
acct = "myhandle2";
|
acct = "myhandle2";
|
||||||
host = "domain.ext";
|
host = "domain.ext";
|
||||||
following = new[] { 2, 4, 5 };
|
following = new[] { 2, 4, 5 };
|
||||||
await dal.CreateFollowerAsync(acct, host, following, followingSync);
|
inboxUrl = "https://domain.ext/myhandle2/inbox";
|
||||||
|
await dal.CreateFollowerAsync(acct, host, following, followingSync, inboxUrl);
|
||||||
|
|
||||||
//User 2
|
//User 2
|
||||||
acct = "myhandle3";
|
acct = "myhandle3";
|
||||||
host = "domain.ext";
|
host = "domain.ext";
|
||||||
following = new[] { 1 };
|
following = new[] { 1 };
|
||||||
await dal.CreateFollowerAsync(acct, host, following, followingSync);
|
inboxUrl = "https://domain.ext/myhandle3/inbox";
|
||||||
|
await dal.CreateFollowerAsync(acct, host, following, followingSync, inboxUrl);
|
||||||
|
|
||||||
var result = await dal.GetFollowersAsync(2);
|
var result = await dal.GetFollowersAsync(2);
|
||||||
Assert.AreEqual(2, result.Length);
|
Assert.AreEqual(2, result.Length);
|
||||||
|
@ -107,9 +112,10 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers
|
||||||
{19, 166L},
|
{19, 166L},
|
||||||
{23, 167L}
|
{23, 167L}
|
||||||
};
|
};
|
||||||
|
var inboxUrl = "https://domain.ext/myhandle/inbox";
|
||||||
|
|
||||||
var dal = new FollowersPostgresDal(_settings);
|
var dal = new FollowersPostgresDal(_settings);
|
||||||
await dal.CreateFollowerAsync(acct, host, following, followingSync);
|
await dal.CreateFollowerAsync(acct, host, following, followingSync, inboxUrl);
|
||||||
var result = await dal.GetFollowerAsync(acct, host);
|
var result = await dal.GetFollowerAsync(acct, host);
|
||||||
|
|
||||||
var updatedFollowing = new[] { 12, 19, 23, 24 };
|
var updatedFollowing = new[] { 12, 19, 23, 24 };
|
||||||
|
@ -143,9 +149,10 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers
|
||||||
{19, 166L},
|
{19, 166L},
|
||||||
{23, 167L}
|
{23, 167L}
|
||||||
};
|
};
|
||||||
|
var inboxUrl = "https://domain.ext/myhandle/inbox";
|
||||||
|
|
||||||
var dal = new FollowersPostgresDal(_settings);
|
var dal = new FollowersPostgresDal(_settings);
|
||||||
await dal.CreateFollowerAsync(acct, host, following, followingSync);
|
await dal.CreateFollowerAsync(acct, host, following, followingSync, inboxUrl);
|
||||||
var result = await dal.GetFollowerAsync(acct, host);
|
var result = await dal.GetFollowerAsync(acct, host);
|
||||||
|
|
||||||
var updatedFollowing = new[] { 12, 19 };
|
var updatedFollowing = new[] { 12, 19 };
|
||||||
|
@ -177,9 +184,10 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers
|
||||||
{19, 166L},
|
{19, 166L},
|
||||||
{23, 167L}
|
{23, 167L}
|
||||||
};
|
};
|
||||||
|
var inboxUrl = "https://domain.ext/myhandle/inbox";
|
||||||
|
|
||||||
var dal = new FollowersPostgresDal(_settings);
|
var dal = new FollowersPostgresDal(_settings);
|
||||||
await dal.CreateFollowerAsync(acct, host, following, followingSync);
|
await dal.CreateFollowerAsync(acct, host, following, followingSync, inboxUrl);
|
||||||
var result = await dal.GetFollowerAsync(acct, host);
|
var result = await dal.GetFollowerAsync(acct, host);
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
|
|
||||||
|
@ -201,9 +209,10 @@ namespace BirdsiteLive.DAL.Postgres.Tests.DataAccessLayers
|
||||||
{19, 166L},
|
{19, 166L},
|
||||||
{23, 167L}
|
{23, 167L}
|
||||||
};
|
};
|
||||||
|
var inboxUrl = "https://domain.ext/myhandle/inbox";
|
||||||
|
|
||||||
var dal = new FollowersPostgresDal(_settings);
|
var dal = new FollowersPostgresDal(_settings);
|
||||||
await dal.CreateFollowerAsync(acct, host, following, followingSync);
|
await dal.CreateFollowerAsync(acct, host, following, followingSync, inboxUrl);
|
||||||
var result = await dal.GetFollowerAsync(acct, host);
|
var result = await dal.GetFollowerAsync(acct, host);
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue