You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.5 KiB
109 lines
3.5 KiB
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<HttpClient> GetClient()
|
|
{
|
|
if (client != null)
|
|
return client;
|
|
|
|
client = new HttpClient();
|
|
|
|
if (string.IsNullOrEmpty(authorizationKey))
|
|
{
|
|
authorizationKey = await client.GetStringAsync($"{Url}login");
|
|
authorizationKey = JsonSerializer.Deserialize<string>(authorizationKey);
|
|
}
|
|
|
|
client.DefaultRequestHeaders.Add("Authorization", authorizationKey);
|
|
client.DefaultRequestHeaders.Add("Accept", "application/json");
|
|
|
|
return client;
|
|
}
|
|
|
|
public static async Task<IEnumerable<Part>> GetAll()
|
|
{
|
|
if (Connectivity.Current.NetworkAccess != NetworkAccess.Internet)
|
|
return new List<Part>();
|
|
|
|
var client = await GetClient();
|
|
string result = await client.GetStringAsync($"{Url}parts");
|
|
|
|
return JsonSerializer.Deserialize<List<Part>>(result, new JsonSerializerOptions
|
|
{
|
|
PropertyNameCaseInsensitive = true,
|
|
});
|
|
}
|
|
|
|
public static async Task<Part> 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<string>(new[] { supplier }),
|
|
PartID = string.Empty,
|
|
PartType = partType,
|
|
PartAvailableDate = DateTime.Now.Date
|
|
};
|
|
|
|
var msg = new HttpRequestMessage(HttpMethod.Post, $"{Url}parts");
|
|
msg.Content = JsonContent.Create<Part>(part);
|
|
|
|
var response = await client.SendAsync(msg);
|
|
response.EnsureSuccessStatusCode();
|
|
|
|
var returnedJson = await response.Content.ReadAsStringAsync();
|
|
|
|
var insertedPart = JsonSerializer.Deserialize<Part>(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>(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();
|
|
}
|
|
}
|
|
}
|
|
|