예제 #1
0
        public async Task <IActionResult> List(string key)
        {
            try
            {
                var networks = await _networkRepository.GetAllAsync();

                var keyValue = await _keyValuesRepository.GetKeyValueAsync(key) ?? new KeyValue();

                if (keyValue.Override == null)
                {
                    keyValue.Override = Array.Empty <OverrideValue>();
                }

                var model = new OverridesModel
                {
                    KeyValue          = keyValue,
                    Networks          = networks,
                    AvailableNetworks = networks
                                        .Where(item => keyValue.Override.All(o => o.NetworkId != item.Id))
                                        .Select(n => new SelectListItem {
                        Text = n.Name, Value = n.Id
                    })
                                        .OrderBy(item => item.Text)
                                        .ToArray()
                };

                return(PartialView("List", model));
            }
            catch (Exception ex)
            {
                _log.Error(ex, context: key);
                return(PartialView("List", new OverridesModel()));
            }
        }
        private async Task <List <KeyValueEntity> > InitKeyValuesAsync(
            IRepository repositoryEntity,
            IEnumerable <KeyValue> placeholders,
            string repositoryTag,
            string keyRepoName,
            bool isCreate)
        {
            var keyValues = new List <KeyValueEntity>();

            // save key values history
            foreach (var keyValue in placeholders)
            {
                if (!string.IsNullOrEmpty(repositoryTag))
                {
                    if (isCreate)
                    {
                        var baseKeyValueEntity = await _keyValuesRepository.GetKeyValueAsync(keyValue.RowKey);

                        if (baseKeyValueEntity?.RepositoryNames != null && baseKeyValueEntity.RepositoryNames.Contains(repositoryEntity?.OriginalName))
                        {
                            keyValue.UseNotTaggedValue = true;
                        }
                    }
                    else
                    {
                        keyValue.UseNotTaggedValue = false;
                    }

                    keyValue.RowKey = repositoryTag + "-" + keyValue.RowKey;
                    keyValue.Tag    = repositoryTag;
                }
                var keyValueEntity = await _keyValuesRepository.GetKeyValueAsync(keyValue.RowKey);

                if (keyValueEntity == null)
                {
                    keyValueEntity = new KeyValueEntity
                    {
                        RowKey          = keyValue.RowKey,
                        RepositoryNames = new[] { keyRepoName },
                        Value           = keyValue.Value,
                    };
                }
                else if (keyValueEntity.RepositoryNames == null)
                {
                    keyValueEntity.RepositoryNames = new[] { keyRepoName };
                }
                else if (keyValueEntity.RepositoryNames != null && !keyValueEntity.RepositoryNames.Contains(keyRepoName))
                {
                    var repositoryIds = keyValueEntity.RepositoryNames.ToList();
                    repositoryIds.Add(keyRepoName);
                    keyValueEntity.RepositoryNames = repositoryIds.ToArray();
                }

                keyValueEntity.Types        = keyValue.Types;
                keyValueEntity.RepositoryId = repositoryEntity.RowKey;
                keyValueEntity.Tag          = keyValue.Tag;
                if (!keyValueEntity.UseNotTaggedValue.HasValue)
                {
                    keyValueEntity.UseNotTaggedValue = keyValue.UseNotTaggedValue;
                }
                keyValues.Add(keyValueEntity as KeyValueEntity);
            }

            return(keyValues);
        }