using System; using System.Collections.Generic; using System.Linq; using System.Net.Http.Json; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace UseRestService.Data { public static class PartsManager { // TODO: Add fields for BaseAddress, Url, and authorizationKey static readonly string BaseAddress = "https://mslearnpartsserver425916999.azurewebsites.net"; static readonly string Url = $"{BaseAddress}/api/"; static HttpClient client; static string authorizationKey; private static async Task GetClient() { if (client != null) return client; client = new HttpClient(); if (string.IsNullOrEmpty(authorizationKey)) { authorizationKey = await client.GetStringAsync($"{Url}login"); authorizationKey = JsonSerializer.Deserialize(authorizationKey); } client.DefaultRequestHeaders.Add("Authorization", authorizationKey); client.DefaultRequestHeaders.Add("Accept", "application/json"); return client; } public static async Task> GetAll() { if (Connectivity.Current.NetworkAccess != NetworkAccess.Internet) return new List(); var client = await GetClient(); string result = await client.GetStringAsync($"{Url}parts"); return JsonSerializer.Deserialize>(result, new JsonSerializerOptions { PropertyNameCaseInsensitive = true, }); } public static async Task Add(string partName, string supplier, string partType) { if (Connectivity.Current.NetworkAccess != NetworkAccess.Internet) return new Part(); var part = new Part() { PartName = partName, Suppliers = new List(new[] { supplier }), PartID = string.Empty, PartType = partType, PartAvailableDate = DateTime.Now.Date }; var msg = new HttpRequestMessage(HttpMethod.Post, $"{Url}parts"); msg.Content = JsonContent.Create(part); var response = await client.SendAsync(msg); response.EnsureSuccessStatusCode(); var returnedJson = await response.Content.ReadAsStringAsync(); var insertedPart = JsonSerializer.Deserialize(returnedJson, new JsonSerializerOptions { PropertyNameCaseInsensitive = true, }); return insertedPart; } public static async Task Update(Part part) { if (Connectivity.Current.NetworkAccess != NetworkAccess.Internet) return; HttpRequestMessage msg = new(HttpMethod.Put, $"{Url}parts/{part.PartID}"); msg.Content = JsonContent.Create(part); var client = await GetClient(); var response = await client.SendAsync(msg); response.EnsureSuccessStatusCode(); } public static async Task Delete(string partID) { if (Connectivity.Current.NetworkAccess != NetworkAccess.Internet) return; HttpRequestMessage msg = new(HttpMethod.Delete, $"{Url}parts/{partID}"); var client = await GetClient(); var response = await client.SendAsync(msg); response.EnsureSuccessStatusCode(); } } }