migrare UI in WebAssembly + integrare Serviciu stocare info pe web + WebToken

This commit is contained in:
andrei-mihnea-cerbu
2024-04-10 06:57:48 +03:00
parent 9977a9b5f5
commit adba50e70b
1915 changed files with 16113 additions and 99991 deletions
@@ -0,0 +1,132 @@
using System.Text;
using System.Text.Json;
using HealthcareManagerUiWebAssem.Models;
using HealthcareManagerUiWebAssem.Services.UserSessionInformation;
using Microsoft.Extensions.Options;
namespace HealthcareManagerUiWebAssem.Services.Http;
public class RequestHttpService : IRequestHttpService
{
private readonly string _apiEndpoint;
private readonly string _apiKey;
private readonly HttpClient _httpClient;
private readonly IUserSessionInformation _userSessionInformation;
public RequestHttpService(IHttpClientFactory httpClientFactory, IUserSessionInformation userSessionInformation,
IOptions<ApplicationSettings> settings)
{
_httpClient = httpClientFactory.CreateClient();
_apiKey = settings.Value.ApiKey ?? "NoKey";
_apiEndpoint = settings.Value.ApiEndpoint;
_userSessionInformation = userSessionInformation;
}
public async Task<BaseResponse> GetByIdAsync(string uri, Guid id, IDictionary<string, string>? headers = null)
{
headers ??= new Dictionary<string, string>();
var request = new HttpRequestMessage(HttpMethod.Get, $"{_apiEndpoint}{uri}/{id}");
AddHeaders(request, headers);
var response = await _httpClient.SendAsync(request);
Thread.Sleep(1000);
return await HandleResponse(response, uri);
}
public async Task<BaseResponse> GetAsync(string uri, IDictionary<string, string>? headers = null)
{
headers ??= new Dictionary<string, string>();
var request = new HttpRequestMessage(HttpMethod.Get, $"{_apiEndpoint}{uri}");
AddHeaders(request, headers);
var response = await _httpClient.SendAsync(request);
Thread.Sleep(1000);
return await HandleResponse(response, uri);
}
public async Task<BaseResponse> PostAsync(string uri, object data, IDictionary<string, string>? headers = null)
{
headers ??= new Dictionary<string, string>();
var request = new HttpRequestMessage(HttpMethod.Post, $"{_apiEndpoint}{uri}"); // Prepend _apiEndpoint
AddHeaders(request, headers);
request.Content = new StringContent(JsonSerializer.Serialize(data), Encoding.UTF8, "application/json");
var response = await _httpClient.SendAsync(request);
Thread.Sleep(1000);
return await HandleResponse(response, uri);
}
public async Task<BaseResponse> PutAsync(string uri, object data, IDictionary<string, string>? headers = null)
{
headers ??= new Dictionary<string, string>();
var request = new HttpRequestMessage(HttpMethod.Put, $"{_apiEndpoint}{uri}");
AddHeaders(request, headers);
request.Content = new StringContent(JsonSerializer.Serialize(data), Encoding.UTF8, "application/json");
var response = await _httpClient.SendAsync(request);
Thread.Sleep(1000);
return await HandleResponse(response, uri);
}
public async Task<BaseResponse> DeleteAsync(string uri, Guid id, IDictionary<string, string>? headers = null)
{
headers ??= new Dictionary<string, string>();
var request = new HttpRequestMessage(HttpMethod.Delete, $"{_apiEndpoint}{uri}/{id}");
AddHeaders(request, headers);
var response = await _httpClient.SendAsync(request);
Thread.Sleep(1000);
return await HandleResponse(response, uri);
}
private async void AddHeaders(HttpRequestMessage request, IDictionary<string, string>? headers)
{
request.Headers.Add("ApiKey", _apiKey);
request.Headers.Add("Authorization", "Bearer " + await _userSessionInformation.GetTokenAsync());
if (headers == null) return;
foreach (var header in headers) request.Headers.Add(header.Key, header.Value);
}
private async Task<BaseResponse> HandleResponse(HttpResponseMessage? response, string uri)
{
var responseContent = await response.Content.ReadAsStringAsync();
var responseJson = JsonSerializer.Deserialize<JsonResponse>(
responseContent,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true }
);
var baseResponse = new BaseResponse();
if (responseJson != null)
{
baseResponse.StatusCode = responseJson.StatusCode;
baseResponse.Message = responseJson.Message;
baseResponse.Data = responseJson.Data.ToString();
baseResponse.Headers = new Dictionary<string, string>();
}
foreach (var header in response.Headers.Concat(response.Content.Headers))
{
Console.WriteLine(header.Key);
if (baseResponse.Headers.ContainsKey(header.Key))
{
baseResponse.Headers[header.Key] += ", " + string.Join(", ", header.Value);
}
else
{
baseResponse.Headers.Add(header.Key, string.Join(", ", header.Value));
}
}
return baseResponse;
}
class JsonResponse
{
public int StatusCode { get; set; }
public string Message { get; set; }
public JsonElement Data { get; set; }
}
}