Beispiel #1
0
        public IActionResult LeaveGroup(int id)
        {
            var user         = _userManager.GetUserAsync(User).Result;
            var oldModerator = user.Id;
            var activeGroup  = _groupHandler.GetById(id);
            var users        = _usersInGroupHandler.GetUsersByGroup(id);

            _usersInGroupHandler.DeleteUserIntoGroup(id, user.Id);
            _hubContext.Clients.Group(activeGroup.GroupName).SendAsync("NotifyGroup", $"{user.UserName} left the group");
            if (_usersInGroupHandler.GetUsersByGroup(id).Count < 1)
            {
                _groupHandler.Delete(activeGroup);
            }
            else
            {
                if (user.Id == activeGroup.ModeratorId)
                {
                    var nextUser = _usersInGroupHandler.GetUsersByGroup(id).FirstOrDefault(l => l.UserId != oldModerator);
                    _groupHandler.ChangeModeratorInGroup(id, nextUser.UserId);

                    _hubContext.Clients.User(_userManager.FindByIdAsync(nextUser.UserId).Result.UserName).SendAsync("ReceiveMessageNotify", user.UserName, "You have become a moderator of the group: " + activeGroup.GroupName);
                }
            }
            return(RedirectToAction(nameof(ChatUsers)));
        }