protected override void DoWork() { var projects = AsyncHelper.RunSync(() => _projectRepository.GetAll().ToListAsync()); foreach (var project in projects) { var utcNow = Clock.Now.ToUniversalTime(); var asanaBaseToken = new AsanaTaskInput() { Token = project.AsanaToken, ProjectId = project.AsanaProjectId, }; var asanaTasks = AsyncHelper.RunSync(() => _asanaManager.GetAllTasksInProject(asanaBaseToken)); var getWorkItemsInput = new GetWorkItemsInput() { Organization = project.DevOpsOrganization, Project = project.DevOpsProjectTitle, Token = project.DevOpsToken, Version = "6.0" }; var result = AsyncHelper.RunSync(() => _devOpsManager.GetProjectWorkItems(getWorkItemsInput)); AsyncHelper.RunSync(() => UpsertAsanaTasks(asanaTasks, project)); AsyncHelper.RunSync(() => UpsertDevOpsTasks(result, project)); } }
public async Task <List <DevOpsValue> > GetProjectWorkItems(GetWorkItemsInput input) { var query = JsonConvert.SerializeObject(new DevopsWorkItemQuery() { query = "Select [System.Title] From WorkItems order by [System.CreatedDate] desc" }); var list = new List <KeyValuePair <int, string> >(); var client = new RestClient($"https://dev.azure.com/{input.Organization}/{input.Project}/_apis/wit/wiql?api-version={input.Version}"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", $"basic {input.Token}"); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", query, ParameterType.RequestBody); IRestResponse response = await client.ExecuteAsync(request); if (response.StatusCode == HttpStatusCode.BadRequest) { throw new UserFriendlyException("an error occurred"); } var stringData = response.Content; var result = JsonConvert.DeserializeObject <WorkItemRoot>(stringData); result.workItems.ForEach(a => { list.Add(new KeyValuePair <int, string>(a.id, a.url)); }); var ids = string.Join(",", list.Select(a => a.Key).ToArray()); using (var httpClient = new HttpClient()) { var httpRequest = new HttpRequestMessage(HttpMethod.Get, $"{input.Organization}/{input.Project}/_apis/wit/workitems?ids={ids}&api-version=6.0"); httpClient.BaseAddress = new Uri("https://dev.azure.com/"); // to do: get uri from appsettings httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); httpClient.DefaultRequestHeaders.Add("Authorization", $"Basic {input.Token}"); var httpResponse = await httpClient.SendAsync(httpRequest); if (httpResponse.StatusCode == HttpStatusCode.BadRequest) { throw new UserFriendlyException("an error occurred"); } var stringworkItemsData = await httpResponse.Content.ReadAsStringAsync(); var workItemDetail = JsonConvert.DeserializeObject <DevOpsWorkItem>(stringworkItemsData); return(workItemDetail.value); } }
private async Task CreateTasksForAsana(CreateProjectDto input) { var query = _projectRepository.GetAll(); var devOpsWorkItemsInput = new GetWorkItemsInput() { Organization = input.DevOpsOrganization, Project = input.DevOpsProject, Token = input.DevOpsAccessToken, Version = "6.0" }; var devOpsTasks = await _devOpsAppService.GetProjectWorkItems(devOpsWorkItemsInput); //devOpsTasks = devOpsTasks.Where(a => !query.Any(x => x.TaskTitle == a.fields.SystemTitle)).ToList(); var asanaCreateTaskDtoRoot = new CreateTaskDtoRoot() { Token = input.AsanaToken, }; asanaCreateTaskDtoRoot.task = new CreateTaskDto(); var asanaTasks = new CreateTaskDtoInput(); var project = new ProjectDto(); foreach (var a in devOpsTasks) { //project.Type = "Asana"; //project.ProjectTitle = input.AsanaProjectName; //project.TaskTitle = //project.TasksDescription = //project.Workspace = asanaTasks.name = a.fields.SystemTitle; //asanaTasks.notes = StripHTML(a.fields.SystemDescription); asanaTasks.workspace = input.AsanaWorkSpace; asanaTasks.projects = new List <string>() { input.AsanaProjectId }; asanaCreateTaskDtoRoot.task.data = asanaTasks; //await SaveProjectInDb(project); await _asanaAppService.CreateTaskInProject(asanaCreateTaskDtoRoot); } }
public async Task <List <DevOpsValue> > GetProjectWorkItems(GetWorkItemsInput input) { return(await _devOpsManager.GetProjectWorkItems(input)); }