Ejemplo n.º 1
0
        /// <summary>
        /// Imports custom fields
        /// </summary>
        /// <returns></returns>
        private async Task <ImportStats> _importCustomFields()
        {
            _logger.LogDebug($"Custom fields import. Start.");

            using var client = RedmineXmlImporter.CreateWebClient();

            var uri  = new Uri($"{_redmineUrl}custom_fields.json?key={_redmineApiKey}");
            var json = await client.DownloadStringTaskAsync(uri);

            var result = new ImportStats();

            var opts = new JsonSerializerOptions
            {
                PropertyNameCaseInsensitive = true
            };

            var list = JsonSerializer.Deserialize <Models.RedmineJson.CustomFieldResponse>(json, opts);

            using var scope = _services.CreateScope();
            using var _db   = scope.ServiceProvider.GetRequiredService <DB>();

            var types = _db.CustomField.ToList();

            result.total = list.FieldList.Count;
            foreach (var item in list.FieldList)
            {
                var dbItem = types.FirstOrDefault(d => d.Id == item.Id);

                if (dbItem == null)
                {
                    dbItem = new Redmine.Models.CustomField
                    {
                        Id      = item.Id,
                        Created = DateTimeOffset.Now
                    };

                    await _db.AddAsync(dbItem);

                    result.added++;
                }

                dbItem.Name       = item.Name;
                dbItem.Type       = item.Type;
                dbItem.Format     = item.Format;
                dbItem.IsRequired = item.IsRequired;
                dbItem.IsMultiple = item.IsMultiple;

                if (_db.Entry(dbItem).State != EntityState.Unchanged)
                {
                    dbItem.Updated = DateTimeOffset.Now;
                    result.updated++;
                }
            }
            await _db.SaveChangesAsync();

            _logger.LogInformation($"Custom fields import. Finish. {list.FieldList.Count} processed.");

            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Imports issues priorities
        /// </summary>
        /// <returns></returns>
        private async Task <ImportStats> _importIssuePriorities()
        {
            _logger.LogDebug($"Priorities import. Start.");

            using var client = RedmineXmlImporter.CreateWebClient();

            var uri  = new Uri($"{_redmineUrl}enumerations/issue_priorities.json?key={_redmineApiKey}");
            var json = await client.DownloadStringTaskAsync(uri);

            var result = new ImportStats();

            var opts = new JsonSerializerOptions
            {
                PropertyNameCaseInsensitive = true
            };

            var list = JsonSerializer.Deserialize <Models.RedmineJson.IssuePriorityResponse>(json, opts);

            // priorities are sorted from lowest to highest
            list.PriorityList.Reverse();

            using var scope = _services.CreateScope();
            using var _db   = scope.ServiceProvider.GetRequiredService <DB>();

            var prios = _db.IssuePriority.ToList();

            _logger.LogDebug($"priorities");

            result.total = list.PriorityList.Count;
            foreach (var item in list.PriorityList)
            {
                var dbItem = prios.FirstOrDefault(d => d.Id == item.Id);

                if (dbItem == null)
                {
                    dbItem = new Redmine.Models.IssuePriority
                    {
                        Id      = item.Id,
                        Sort    = list.PriorityList.IndexOf(item) + 1, // 1 .. 5
                        Created = DateTimeOffset.Now
                    };

                    dbItem.Name = item.Name;

                    var code = $"prio{dbItem.Sort}";
                    if (!prios.Any(d => d.Code == code))
                    {
                        dbItem.Code = code;
                    }

                    await _db.AddAsync(dbItem);

                    result.added++;
                }

                if (_db.Entry(dbItem).State != EntityState.Unchanged)
                {
                    dbItem.Updated = DateTimeOffset.Now;
                    result.updated++;
                }
            }
            await _db.SaveChangesAsync();

            _logger.LogInformation($"Priorities import. Finish. {list.PriorityList.Count} processed.");

            return(result);
        }