37 lines
1.4 KiB
C#
37 lines
1.4 KiB
C#
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<bool> IsAcceptedFollower(LocalActor group, string actorUri, CancellationToken token) =>
|
||
|
|
await DB.Default.Find<Follower>()
|
||
|
|
.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<GroupEntity>().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<GroupEntity>().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<GroupEntity>(group, token);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|