Basics setup, going to change how repos work

This commit is contained in:
2022-07-14 18:12:04 -04:00
commit 4c42b765e1
64 changed files with 2385 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
using Microsoft.AspNetCore.WebUtilities;
using Newtonsoft.Json;
using Shared.Models;
namespace Shared.AccessLayers;
public abstract class ApiAccessLayer
{
private readonly HttpClient _httpClient;
protected ApiAccessLayer(string apiBaseUrl)
{
_httpClient = new HttpClient();
_httpClient.BaseAddress = new Uri(apiBaseUrl);
}
private async Task<HttpResponseWrapper> SendRequest(HttpRequestMessage message)
{
var response = await _httpClient.SendAsync(message);
return new HttpResponseWrapper()
{
HttpResponseMessage = response
};
}
private async Task<HttpResponseWrapper<T>> SendRequest<T>(HttpRequestMessage message)
{
var wrapper = await SendRequest(message);
if (wrapper.HttpResponseMessage.IsSuccessStatusCode)
{
var parsedJson =
JsonConvert.DeserializeObject<T>(await wrapper.HttpResponseMessage.Content.ReadAsStringAsync());
return new HttpResponseWrapper<T>
{
HttpResponseMessage = wrapper.HttpResponseMessage,
ResponseObject = parsedJson
};
}
return new HttpResponseWrapper<T>
{
HttpResponseMessage = wrapper.HttpResponseMessage,
ResponseObject = default(T)
};
}
protected HttpRequestMessage CreateRequestMessage(string endpoint, HttpMethod method, Dictionary<string, string>? queryParams = null,
object? data = null)
{
HttpRequestMessage message = new HttpRequestMessage();
string uri = endpoint;
if (queryParams != null)
{
uri = QueryHelpers.AddQueryString(endpoint, queryParams);
}
message.RequestUri = new Uri(uri);
message.Method = method;
if (data != null)
{
message.Content = new StringContent(JsonConvert.SerializeObject(data));
}
return message;
}
protected async Task<HttpResponseWrapper> SendRequest(string endpoint, HttpMethod method, Dictionary<string, string>? queryParams = null, object? data = null)
{
HttpRequestMessage message = CreateRequestMessage(endpoint, method, queryParams, data);
return await SendRequest(message);
}
protected async Task<HttpResponseWrapper<T>> SendGet<T>(string endpoint, HttpMethod method, Dictionary<string, string>? queryParams = null, object? data = null)
{
HttpRequestMessage message = CreateRequestMessage(endpoint, method, queryParams, data);
return await SendRequest<T>(message);
}
}

View File

@@ -0,0 +1,11 @@
namespace Shared.Models;
public class HttpResponseWrapper<T> : HttpResponseWrapper
{
public T? ResponseObject { get; set; }
}
public class HttpResponseWrapper
{
public HttpResponseMessage HttpResponseMessage { get; set; }
}

19
Shared/Shared.csproj Normal file
View File

@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Folder Include="Interfaces" />
<Folder Include="Utility" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
</Project>