public IActionResult RemoveSubgroupMember(long id)
        {
            var userToSubgroup = new UserToSubgroup
            {
                SubgroupId = id
            };

            if (userToSubgroup == null)
            {
                _logger.LogError($"Invalid client request: object was null");
                return(BadRequest("Invalid client request: object was null"));
            }

            var userMail = AuthControllerExtensions.JwtNameExtractor(Request.Headers["Authorization"]);
            var dbUser   = _repository.User.GetUserByEmail(userMail);

            try
            {
                var subgroup           = _repository.Subgroup.GetSubgroupById(userToSubgroup.SubgroupId);
                var allSubgroupMembers = _repository.UserToSubgroup.GetMembersForSubgroup(subgroup).ToList();
                var isMember           = false;

                foreach (var mem in allSubgroupMembers)
                {
                    if (mem.Id.Equals(dbUser.Id))
                    {
                        isMember = true;
                        break;
                    }
                }

                if (isMember)
                {
                    var allUserToSubgroups = _repository.UserToSubgroup.GetMembershipsForSubgroup(subgroup).ToList();

                    foreach (var ms in allUserToSubgroups)
                    {
                        if (ms.UserId.Equals(dbUser.Id))
                        {
                            _repository.UserToSubgroup.DeleteMembership(ms);
                            _repository.Save();

                            return(Accepted());
                        }
                    }
                }

                return(BadRequest("User is not member of this subgroup"));
            }

            catch (Exception e)
            {
                _logger.LogError($"Something went wrong inside RemoveSubgroupMember: {e.Message}");
                return(StatusCode(500, $"Something went wrong while deleting subgroup member"));
            }
        }
        public IActionResult CreateSubgroup([FromBody] Subgroup subgroup)
        {
            if (subgroup == null)
            {
                _logger.LogError("Invalid object: subgroup was null");
                return(BadRequest("Invalid client request"));
            }

            if (!ModelState.IsValid)
            {
                _logger.LogError("Invalid subgroup object sent from client.");
                return(BadRequest("Invalid subgroup object sent from client."));
            }

            if (!subgroup.ValidateCreateSubgroup())
            {
                return(BadRequest("Sent object was not valid!"));
            }

            try
            {
                var userMail = AuthControllerExtensions.JwtNameExtractor(Request.Headers["Authorization"]);
                var dbUser   = _repository.User.GetUserByEmail(userMail);

                var mainGroup = _repository.Group.GetGroupById(subgroup.Main_group);

                if (mainGroup.AdminUserId.Equals(dbUser.Id))
                {
                    _repository.Subgroup.Create(subgroup);
                    _repository.Save();

                    var adminMemberShip = new UserToSubgroup
                    {
                        UserId     = dbUser.Id,
                        SubgroupId = subgroup.Id
                    };

                    _repository.UserToSubgroup.AddMembership(adminMemberShip);
                    _repository.Save();

                    return(Ok(_repository.Subgroup.GetSubgroupById(subgroup.Id)));
                }

                return(BadRequest("Only admin can add a subgroup to a group!"));
            }
            catch (Exception e)
            {
                _logger.LogError($"Something went wrong inside CreateSubgroup: {e.Message}");
                return(StatusCode(500, "Something went wrong during creating subgroup"));
            }
        }
        public IActionResult AddMembers([FromBody] UserToSubgroup userToSubgroup)
        {
            if (userToSubgroup == null)
            {
                _logger.LogError($"Invalid client request: object was null");
                return(BadRequest("Invalid client request: object was null"));
            }

            if (!ModelState.IsValid)
            {
                _logger.LogError($"Invalid client request: object was invalid");
                return(BadRequest("Invalid client request: object was invalid"));
            }

            try
            {
                var userMail = AuthControllerExtensions.JwtNameExtractor(Request.Headers["Authorization"]);
                var dbUser   = _repository.User.GetUserByEmail(userMail);

                var subgroup = _repository.Subgroup.GetSubgroupById(userToSubgroup.SubgroupId);

                if (subgroup == null)
                {
                    _logger.LogError("The subgroup was not found!");
                    return(BadRequest("The subgroup was not found!"));
                }

                var mainGroup           = _repository.Group.GetGroupById(subgroup.Main_group);
                var allMainGroupMembers = _repository.UserToGroup.GetMembersForGroup(mainGroup);

                var userIsMemberOfGroup = false;

                foreach (var user in allMainGroupMembers)
                {
                    if (user.Id.Equals(dbUser.Id))
                    {
                        userIsMemberOfGroup = true;
                        break;
                    }
                }

                if (!userIsMemberOfGroup)
                {
                    return(BadRequest("User is not member of group so user cant be member of subgroup"));
                }

                var allSubgroupMembers = _repository.UserToSubgroup.GetMembersForSubgroup(subgroup);

                var userIsMemberOfSubgroup = false;

                foreach (var user in allSubgroupMembers)
                {
                    if (user.Id.Equals(dbUser.Id))
                    {
                        userIsMemberOfSubgroup = true;
                        break;
                    }
                }

                if (userIsMemberOfSubgroup)
                {
                    return(BadRequest("User is already member of subgroup"));
                }

                UserToSubgroup _userToSubgroup = new UserToSubgroup()
                {
                    SubgroupId = subgroup.Id,
                    UserId     = dbUser.Id
                };

                _repository.UserToSubgroup.Create(_userToSubgroup);
                _repository.Save();
                return(Accepted());
            }
            catch (Exception e)
            {
                _logger.LogError($"Something went wrong inside AddMembers {e.Message}");
                return(StatusCode(500, $"Something went wrong while saving new subgroup member"));
            }
        }