internal OutPutObject ConvertToOutput(Team team) { OutPutObject returnValue = new OutPutObject(); returnValue.TeamID = team.ID; returnValue.SystemType = team.SystemType; foreach (var record in Records) { Sprint sprint = returnValue.Sprints.Where(x => x.IterationPath == record.Fields.IterationPath).FirstOrDefault(); if (sprint == null) { var sourceSprint = SourceSystemSprints.SprintItems.Where(x => x.path == record.Fields.IterationPath).FirstOrDefault(); sprint = new Sprint(); //sprint.LegacyID = sourceSprint.id; sprint.ID = sourceSprint.name;//record.Fields.id.ToString(); sprint.Name = sourceSprint.name; sprint.IterationPath = sourceSprint.path; sprint.StartDate = sourceSprint.SprintAttributes.StartDate; sprint.EndDate = sourceSprint.SprintAttributes.EndDate; returnValue.Sprints.Add(sprint); } //story.SprintName = record.Fields.IterationPath; //story.SprintName = record.Fields.Title; Story story = new Story(); sprint.Stories.Add(story); //story.AssignedTo = record.Fields.AssignedTo; story.ID = record.Fields.id.ToString(); story.Type = record.Fields.WorkItemTypeEnumValue.ToString(); story.State = record.Fields.State; switch (record.Fields.WorkItemTypeEnumValue) { case WorkItemTypeEnum.PBI: story.Points = record.Fields.Effort; break; case WorkItemTypeEnum.Bug: case WorkItemTypeEnum.Unknown: case WorkItemTypeEnum.UserStory: default: story.Points = record.Fields.StoryPointValue; break; } //assigning all the points to the user at this time. story.Assignees.Add(new Assignee() { ID = record.Fields.AssignedTo, Points = story.Points }); } return(returnValue); }
private List <string> FlattenUsers(OutPutObject jsonContent) { List <string> list = new List <string>(); var users = ( from sprint in jsonContent.Sprints from story in sprint.Stories from assignees in story.Assignees select assignees ).Distinct(); foreach (var user in users) { if (!list.Contains(user.ID) && !string.IsNullOrEmpty(user.ID)) { list.Add(user.ID); } } return(list); }
private void AddAnyMissingUsers(AgileSystem agileSystem, OutPutObject jsonContent) { List <string> userList = FlattenUsers(jsonContent); foreach (var user in userList) { AgileSystemUser asu = _dataContext.AgileSystemUser.Where(x => x.AgileSystemUserName == user && agileSystem.AgileSystemId == x.AgileSystemId).FirstOrDefault(); if (asu == null) { //set em up, they weren't found asu = new AgileSystemUser() { AgileSystemUserId = Guid.NewGuid().ToString(), AgileSystemUserName = user, AgileSystemId = agileSystem.AgileSystemId, Active = true //work values populated upon cross reference (manual) }; _dataContext.AgileSystemUser.Add(asu); } } _dataContext.SaveChanges(); }
public void ProcessTeams() { string file = $@"{AppDomain.CurrentDomain.BaseDirectory}appSettings.JSON"; string fileContents = GetFileContents(file); AppSetting settings = JsonConvert.DeserializeObject <AppSetting>(fileContents); foreach (var team in settings.Teams) { Console.WriteLine($"Exporting team {team.Code}."); string _credentials = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", team.Token))); string siteUrl = $@"https://{team.TFSUrl}"; using (var client = new HttpClient()) { client.BaseAddress = new Uri(siteUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", _credentials); //GetWorkItemsByWiql(client, team); SprintResult sprintsFromSourceSystem = GetSprintsFromTeam(client, team); HttpResponseMessage queryHttpResponseMessage = RunQueries(client, team); if (queryHttpResponseMessage.IsSuccessStatusCode) { //bind the response content to the queryResult object QueryResult queryResult = queryHttpResponseMessage.Content.ReadAsAsync <QueryResult>().Result; string queryId = queryResult.id; HttpResponseMessage httpResponseMessage = RunIDQuery(client, team, queryId); if (httpResponseMessage.IsSuccessStatusCode) { WorkItemQueryResult workItemQueryResult = httpResponseMessage.Content.ReadAsAsync <WorkItemQueryResult>().Result; //now that we have a bunch of work items, build a list of id's so we can get details var builder = new System.Text.StringBuilder(); foreach (var item in workItemQueryResult.workItems) { builder.Append(item.id.ToString()).Append(","); } //clean up string of id's string ids = builder.ToString().TrimEnd(new char[] { ',' }); //string[] idToQuery = ids.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); HttpResponseMessage getWorkItemsHttpResponse = RunWorkItemsQuery(client, team, ids, settings); if (getWorkItemsHttpResponse.IsSuccessStatusCode) { var result = getWorkItemsHttpResponse.Content.ReadAsStringAsync().Result; RootObject ro = JsonConvert.DeserializeObject <RootObject>(result); ro.SourceSystemSprints = sprintsFromSourceSystem; OutPutObject output = ro.ConvertToOutput(team); string fileContent = JsonConvert.SerializeObject(output); WriteFile(team.Code, settings.OutputDirectory, fileContent); } } } } } }