public async Task <int> AssignMembers(int groupId, AssignScope scope, string search = null)
        {
            if (!string.IsNullOrWhiteSpace(search))
            {
                search = UsersHelper.ReplaceWildcardCharacters(search);
            }

            var parameters = new DynamicParameters();

            parameters.Add("@GroupId", groupId);
            parameters.Add("@GroupsIds", SqlConnectionWrapper.ToDataTable(GroupsHelper.ParsingTypesToUserTypeArray(scope.Members, UserType.Group)));
            parameters.Add("@UsersIds", SqlConnectionWrapper.ToDataTable(GroupsHelper.ParsingTypesToUserTypeArray(scope.Members, UserType.User)));
            parameters.Add("@SelectAll", scope.SelectAll);
            parameters.Add("@Search", search);
            parameters.Add("@ErrorCode", dbType: DbType.Int32, direction: ParameterDirection.Output);
            var result = await _connectionWrapper.ExecuteScalarAsync <int>("AssignGroupMembers", parameters, commandType : CommandType.StoredProcedure);

            var errorCode = parameters.Get <int?>("ErrorCode");

            if (errorCode.HasValue)
            {
                switch (errorCode.Value)
                {
                case (int)SqlErrorCodes.GroupWithCurrentIdNotExist:
                    throw new ResourceNotFoundException(ErrorMessages.GroupNotExist, ErrorCodes.ResourceNotFound);

                case (int)SqlErrorCodes.GeneralSqlError:
                    throw new Exception(ErrorMessages.GeneralErrorOfUpdatingGroup);
                }
            }

            return(result);
        }
        public async Task <int> DeleteMembersFromGroupAsync(int groupId, AssignScope body)
        {
            var parameters = new DynamicParameters();

            parameters.Add("@GroupId", groupId);
            parameters.Add("@GroupsIds", SqlConnectionWrapper.ToDataTable(GroupsHelper.ParsingTypesToUserTypeArray(body.Members, UserType.Group)));
            parameters.Add("@UsersIds", SqlConnectionWrapper.ToDataTable(GroupsHelper.ParsingTypesToUserTypeArray(body.Members, UserType.User)));
            parameters.Add("@SelectAll", body.SelectAll);
            parameters.Add("@ErrorCode", dbType: DbType.Int32, direction: ParameterDirection.Output);

            var result = await _connectionWrapper.ExecuteScalarAsync <int>("DeleteMembersFromGroup", parameters, commandType : CommandType.StoredProcedure);

            var errorCode = parameters.Get <int?>("ErrorCode");

            if (errorCode.HasValue)
            {
                switch (errorCode.Value)
                {
                case (int)SqlErrorCodes.GeneralSqlError:
                    throw new Exception(ErrorMessages.GeneralErrorOfRemovingMembersFromGroup);

                case (int)SqlErrorCodes.GroupWithCurrentIdNotExist:
                    throw new ResourceNotFoundException(ErrorMessages.GroupNotExist, ErrorCodes.ResourceNotFound);
                }
            }

            return(result);
        }