private void HandleSettingGroup(
            long pluginId,
            long?parentGroupId,
            [NotNull] PluginSettingGroupDefinition groupDefinition,
            ICollection <string> settingKeys)
        {
            var groupId = HandleGroupItself(pluginId, parentGroupId, groupDefinition);

            if (groupDefinition.SettingDefinitions != null)
            {
                foreach (var pluginSetting in groupDefinition.SettingDefinitions)
                {
                    HandleSetting(pluginId, groupId, pluginSetting);

                    settingKeys.Add(pluginSetting.Code);

                    LogInitializedSetting(pluginId, pluginSetting.Code);
                }
            }

            if (groupDefinition.SettingGroupDefinitions == null)
            {
                return;
            }

            foreach (var innerGroupDefinition in groupDefinition.SettingGroupDefinitions)
            {
                HandleSettingGroup(pluginId, groupId, innerGroupDefinition, settingKeys);
            }
        }
        private long HandleGroupItself(
            long pluginId,
            long?parentGroupId,
            [NotNull] PluginSettingGroupDefinition groupDefinition)
        {
            var groupDb = _settingGroupRepository.Get(pluginId, groupDefinition.Code);

            if (groupDb != null)
            {
                return(groupDb.Id);
            }

            groupDb = new SettingGroups
            {
                Code          = groupDefinition.Code,
                DisplayName   = groupDefinition.DisplayName,
                OwnerPluginId = pluginId,
                ParentGroupId = parentGroupId
            };
            _settingGroupRepository.Insert(groupDb);
            _settingGroupRepository.Save();

            return(groupDb.Id);
        }