using MongoDB.Entities; using PrivaPub.Federation.Actors; using PrivaPub.Models.Federation; using PrivaPub.Models.Group; using GroupEntity = PrivaPub.Models.Group.Group; namespace PrivaPub.Federation.Inbox { public static class ForeignMembers { public static async Task IsAcceptedFollower(LocalActor group, string actorUri, CancellationToken token) => await DB.Default.Find() .Match(f => f.LocalActorId == group.Id && f.LocalActorKind == LocalActorKind.Group && f.ActorURI == actorUri && f.IsAccepted) .ExecuteAnyAsync(token); public static async Task AddForeignMember(string groupId, string actorUri, CancellationToken token) { var group = await DB.Default.Find().MatchID(groupId).ExecuteFirstAsync(token); if (group == default || group.Members.Any(m => m.IsForeign && m.AvatarId == actorUri)) return; group.Members.Add(new GroupMember { AvatarId = actorUri, IsForeign = true }); group.UpdatedAt = DateTime.UtcNow; await DB.Default.SaveAsync(group, token); } public static async Task RemoveForeignMember(string groupId, string actorUri, CancellationToken token) { var group = await DB.Default.Find().MatchID(groupId).ExecuteFirstAsync(token); if (group == default || group.Members.RemoveAll(m => m.IsForeign && m.AvatarId == actorUri) == 0) return; group.UpdatedAt = DateTime.UtcNow; await DB.Default.SaveAsync(group, token); } } }