using HermesSocketLibrary.Requests.Messages; using HermesSocketServer.Models; using ILogger = Serilog.ILogger; namespace HermesSocketServer.Requests { public class UpdateGroupChatter : IRequest { public string Name => "update_group_chatter"; public string[] RequiredKeys => ["group", "chatter", "label"]; private ILogger _logger; public UpdateGroupChatter(ILogger logger) { _logger = logger; } public Task Grant(Channel channel, IDictionary data) { var id = Guid.NewGuid(); string groupId = data["group"].ToString()!; if (!int.TryParse(data["chatter"].ToString()!, out var chatterId)) return Task.FromResult(RequestResult.Failed("Chatter Id needs to be an integer.")); string chatterLabel = data["label"].ToString()!; var groupChatter = new GroupChatter() { UserId = channel.Id, GroupId = groupId, ChatterId = chatterId, ChatterLabel = chatterLabel, }; if (!channel.Groups.Chatters.TryGetValue(groupId, out var chatters)) return Task.FromResult(RequestResult.Failed($"The group does not exist.")); bool result = chatters.Modify(chatterId.ToString(), groupChatter); if (result) { _logger.Information($"Updated group chatter on channel [group id: {id}][group id: {groupId}][chatter id: {chatterId}][chatter label: {chatterLabel}][channel: {channel.Id}]"); return Task.FromResult(RequestResult.Successful(groupChatter)); } return Task.FromResult(RequestResult.Failed("Something went wrong when updating the cache.")); } } }