/// <summary> /// Queries a ticket from Azure DevOps by it's id. /// </summary> /// <returns>TicketModel representing the ticket-results of the Query.</returns> public static async Task <TicketModel> QueryTicketAsync(long id) { using (var httpClient = CreateClient()) { httpClient.SetBaseUri("wit"); var queryParams = $"fields={string.Join(",", "System.Title", "System.WorkItemType", "System.State")}&$expand=links"; var result = JToken.Parse(await httpClient.SendRequestAsync($"workitems/{id}", queryParams)); return(TicketModel.FromJToken(result)); } }
/// <summary> /// Creates a ticket in Azure DevOps. /// </summary> /// <param name="createTicketModel">The ticket to create.</param> /// <returns>A TicketModel that describes the created ticket.</returns> public static async Task <TicketModel> CreateTicketAsync(ICreateTicketModel createTicketModel) { if (createTicketModel == null) { throw new ArgumentNullException(nameof(createTicketModel), "The passed createTicketModel must not be null."); } var areaPath = CloudConfigurationManager.GetSetting("AzureReporting.AreaPath") ?? throw new Exception("Configuration: AzureReporting.AreaPath must not be empty."); using (var httpClient = CreateClient()) { httpClient.SetBaseUri("wit"); var patchOperations = createTicketModel.ToPatchOperations().Concat(new[] { new PatchOperation("add", "/fields/System.AreaPath", areaPath) }); var result = JToken.Parse(await httpClient.SendRequestAsync($"workitems{createTicketModel.GetUriPath()}", null, "PATCH", patchOperations, "application/json-patch+json")); return(TicketModel.FromJToken(result)); } }