Exemple #1
0
        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));
            }
        }
Exemple #2
0
        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));
 }