/// <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); }
/// <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); }