Files
hermes-server/Requests/DeleteGroup.cs

66 lines
2.7 KiB
C#

using HermesSocketServer.Models;
using ILogger = Serilog.ILogger;
namespace HermesSocketServer.Requests
{
public class DeleteGroup : IRequest
{
public string Name => "delete_group";
public string[] RequiredKeys => ["id"];
private ILogger _logger;
public DeleteGroup(ILogger logger)
{
_logger = logger;
}
public Task<RequestResult> Grant(Channel channel, IDictionary<string, object> data)
{
var groupIdString = data["id"].ToString()!;
var groupId = new Guid(groupIdString);
var result = channel.Groups.Remove(groupIdString);
if (result)
{
if (channel.Groups.Chatters.TryGetValue(groupId.ToString(), out var chatters))
{
var filteredChatters = chatters.Get().Values;
foreach (var chatter in filteredChatters)
{
var res = chatters.Remove(chatter.ChatterId.ToString(), fromCascade: true);
if (!res)
_logger.Warning($"Failed to delete group chatter by id from cascade [group chatter id: {chatter.ChatterId}]");
}
}
var permissions = channel.GroupPermissions.Get().Values
.Where(p => p.GroupId == groupId);
foreach (var permission in permissions)
{
var res = channel.GroupPermissions.Remove(permission.Id, fromCascade: true);
if (!res)
_logger.Warning($"Failed to delete group permission by id from cascade [group permission id: {permission.Id}]");
}
var policies = channel.Policies.Get().Values
.Where(c => c.GroupId == groupId).ToArray();
foreach (var policy in policies)
{
var res = channel.Policies.Remove(policy.Id.ToString(), fromCascade: true);
if (!res)
_logger.Warning($"Failed to delete group policy by id from cascade [group policy id: {policy.Id}]");
}
if (!channel.Groups.Chatters.Remove(groupIdString))
_logger.Warning($"Failed to delete group chatters from inner store [group id: {groupId}]");
_logger.Information($"Deleted a group by id [group id: {groupId}]");
return Task.FromResult(RequestResult.Successful(null));
}
_logger.Warning($"Group Id does not exist [group id: {groupId}]");
return Task.FromResult(RequestResult.Failed("Something went wrong when updating the cache."));
}
}
}