feat: cache contacts and add forced sync
Build web service image / build (push) Successful in 1m13s

This commit is contained in:
2026-09-23 11:17:43 +08:00
parent cc2321aa86
commit bfa0059d3a
13 changed files with 708 additions and 121 deletions
@@ -160,4 +160,29 @@ public sealed class RemoteDataSyncTests
private static RemoteSyncMessage Message(string messageId, string chatId) => new(
messageId, chatId, ReportingChatType.Private, "source-" + messageId, "incoming", "text", "hello",
DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, "wx-1", "payload-" + messageId);
[Fact]
public void ContactBatches_FilterUnauthorizedContactsAndRehash()
{
var config = ConfigFor("chat-a");
var batch = new RemoteSyncBatch(
"node-a", "account-a", "contacts-1", "generation-a", "contacts", 1, "{}", "{}", string.Empty, "complete", [], [])
{
ContactsSnapshotId = "snapshot-1",
Contacts =
[
new RemoteSyncContact("chat-a", ReportingChatType.Private, "Allowed", "", DateTimeOffset.UtcNow),
new RemoteSyncContact("chat-b", ReportingChatType.Private, "Filtered", "", DateTimeOffset.UtcNow)
]
};
var filtered = RemoteDataBatchAuthorization.Filter(config, batch, out var reason);
Assert.NotNull(filtered);
Assert.Equal("SomeRecordsDroppedByReporting", reason);
Assert.Equal("partial", filtered!.CoverageState);
Assert.Single(filtered.Contacts);
Assert.Equal("chat-a", filtered.Contacts[0].ChatId);
Assert.Equal(RemoteDataBatchAuthorization.ComputePayloadHash(filtered), filtered.PayloadHash);
}
}