private (bool, List <string>) LeavePublicChat(PublicChatEventPayload e)
        {
            LeaveEvent leaveEvent = JsonSerializer.Deserialize <LeaveEvent>(e.EventData.ToString());
            var        res        = _userController.LeavePublicChat(e.ChatId);

            if (res)
            {
                var sendedToUsers = _userController.SendMessageToChat(e.ChatId,
                                                                      new Message()
                {
                    Id   = ObjectId.GenerateNewId(), Sender = "System",
                    Body = $"Member {_userController.User.FirstName + " " + _userController.User.LastName} left the chat"
                });
                sendedToUsers.Add(_userController.User.Id.ToString());
                return(true, sendedToUsers);
            }

            return(false, null);
        }
        private (bool, List <string>) TranferAdminRightsToUser(PublicChatEventPayload e)
        {
            AdminRoleTransferEvent excludeEvent = JsonSerializer.Deserialize <AdminRoleTransferEvent>(e.EventData.ToString());
            var res = _userController.TranferAdminRightsToUser(e.ChatId, excludeEvent.UserId);

            if (res.Item1)
            {
                var sendedToUsers = _userController.SendMessageToChat(
                    e.ChatId,
                    new Message()
                {
                    Id     = ObjectId.GenerateNewId(),
                    Sender = "System",
                    Body   = $"Member {res.Item2} is admin now"
                });
                return(true, sendedToUsers);
            }

            return(false, null);
        }
        private (bool, List <string>) AddMemberToPublicChat(PublicChatEventPayload e)
        {
            ExcludeEvent excludeEvent = JsonSerializer.Deserialize <ExcludeEvent>(e.EventData.ToString());
            var          res          = _userController.AddMemberToPublicChat(e.ChatId, excludeEvent.UserId);

            if (res.Item1)
            {
                var sendedToUsers = _userController.SendMessageToChat(
                    e.ChatId,
                    new Message()
                {
                    Id     = ObjectId.GenerateNewId(),
                    Sender = "System",
                    Body   = $"Member {res.Item2} was added\n" +
                             $"by {_userController.User.FirstName} {_userController.User.LastName}"
                });
                return(true, sendedToUsers);
            }

            return(false, null);
        }
 public (bool, List <string>) ProcessPublicChatEvents(PublicChatEventPayload eventPayload)
 {
     return(publicChatHandlers[eventPayload.EventType](eventPayload));
 }
 private delegate(bool, List <string>) HandleEvent(PublicChatEventPayload request);