From 25e93a39fdf992cf673b3d610318019d9e52dcd4 Mon Sep 17 00:00:00 2001 From: Gary Murphy Date: Sat, 15 Apr 2023 00:00:22 +0100 Subject: [PATCH] Http request service added --- src/PanoptesFrontend/Data/HttpService.cs | 31 ++++++++++++ src/PanoptesFrontend/Data/WeatherForecast.cs | 12 ----- .../Data/WeatherForecastService.cs | 19 -------- src/PanoptesFrontend/Pages/FetchData.razor | 48 ------------------- src/PanoptesFrontend/Pages/TestCard.razor | 10 ---- src/PanoptesFrontend/Pages/TestRequest.razor | 24 +++++----- src/PanoptesFrontend/PanoptesFrontend.csproj | 1 + src/PanoptesFrontend/Program.cs | 2 +- 8 files changed, 45 insertions(+), 102 deletions(-) create mode 100644 src/PanoptesFrontend/Data/HttpService.cs delete mode 100644 src/PanoptesFrontend/Data/WeatherForecast.cs delete mode 100644 src/PanoptesFrontend/Data/WeatherForecastService.cs delete mode 100644 src/PanoptesFrontend/Pages/FetchData.razor delete mode 100644 src/PanoptesFrontend/Pages/TestCard.razor diff --git a/src/PanoptesFrontend/Data/HttpService.cs b/src/PanoptesFrontend/Data/HttpService.cs new file mode 100644 index 0000000..e658e23 --- /dev/null +++ b/src/PanoptesFrontend/Data/HttpService.cs @@ -0,0 +1,31 @@ +namespace PanoptesFrontend.Data; +using System.Net.Http; +using System.Threading.Tasks; +using System.Text.Json; + +public interface IHttpService +{ + Task GetAsync(string endpoint); +} + +public class HttpService : IHttpService { + + private readonly HttpClient httpClient; + + public HttpService(HttpClient httpClient){ + this.httpClient = httpClient; + } + + public async Task GetAsync(string endpoint){ + var response = await httpClient.GetAsync(endpoint); + + if (response.IsSuccessStatusCode){ + var contentStream = await response.Content.ReadAsStreamAsync(); + var options = new JsonSerializerOptions {PropertyNameCaseInsensitive = true}; + return await JsonSerializer.DeserializeAsync(contentStream, options); + } + else { + throw new Exception($"Failed to get data from endpoint: {endpoint}. Error code: {response.StatusCode}"); + } + } +} \ No newline at end of file diff --git a/src/PanoptesFrontend/Data/WeatherForecast.cs b/src/PanoptesFrontend/Data/WeatherForecast.cs deleted file mode 100644 index 34cfda5..0000000 --- a/src/PanoptesFrontend/Data/WeatherForecast.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace PanoptesFrontend.Data; - -public class WeatherForecast -{ - public DateTime Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } -} diff --git a/src/PanoptesFrontend/Data/WeatherForecastService.cs b/src/PanoptesFrontend/Data/WeatherForecastService.cs deleted file mode 100644 index e38420d..0000000 --- a/src/PanoptesFrontend/Data/WeatherForecastService.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace PanoptesFrontend.Data; - -public class WeatherForecastService -{ - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - public Task GetForecastAsync(DateTime startDate) - { - return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = startDate.AddDays(index), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }).ToArray()); - } -} diff --git a/src/PanoptesFrontend/Pages/FetchData.razor b/src/PanoptesFrontend/Pages/FetchData.razor deleted file mode 100644 index be76918..0000000 --- a/src/PanoptesFrontend/Pages/FetchData.razor +++ /dev/null @@ -1,48 +0,0 @@ -@page "/fetchdata" - -Weather forecast - -@using PanoptesFrontend.Data -@inject WeatherForecastService ForecastService - -

Weather forecast

- -

This component demonstrates fetching data from a service.

- -@if (forecasts == null) -{ -

Loading...

-} -else -{ - - - - - - - - - - - @foreach (var forecast in forecasts) - { - - - - - - - } - -
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
-} - -@code { - private WeatherForecast[]? forecasts; - - protected override async Task OnInitializedAsync() - { - forecasts = await ForecastService.GetForecastAsync(DateTime.Now); - } -} diff --git a/src/PanoptesFrontend/Pages/TestCard.razor b/src/PanoptesFrontend/Pages/TestCard.razor deleted file mode 100644 index 6cf748c..0000000 --- a/src/PanoptesFrontend/Pages/TestCard.razor +++ /dev/null @@ -1,10 +0,0 @@ -
-
-

@Data.Text

-
-
- -@code { - [Parameter] - public Component Data { get; set; } -} \ No newline at end of file diff --git a/src/PanoptesFrontend/Pages/TestRequest.razor b/src/PanoptesFrontend/Pages/TestRequest.razor index 1ecc38f..e5edd4c 100644 --- a/src/PanoptesFrontend/Pages/TestRequest.razor +++ b/src/PanoptesFrontend/Pages/TestRequest.razor @@ -1,11 +1,10 @@ @page "/test" -@using System.Net.Http.Json -@using System.Text.Json +@using PanoptesFrontend.Data +@using System.Text.Json; +@inject IHttpService httpService -@inject HttpClient httpClient - -@if (data != null) +@* @if (data != null) { @foreach (var component in data) { switch (component.Type) { @@ -28,16 +27,17 @@ } } -} +} *@ + +
@response.Text
@code { - private Component[] data; + private Component response; protected override async Task OnInitializedAsync() { - var response = await httpClient.GetStringAsync("http://localhost:8080/schema"); - var options = new JsonSerializerOptions {PropertyNameCaseInsensitive = true}; - var json = JsonSerializer.Deserialize(response, options); - data = json.components; + response = await httpService.GetAsync("http://localhost:8080/test"); } -} \ No newline at end of file + +} + diff --git a/src/PanoptesFrontend/PanoptesFrontend.csproj b/src/PanoptesFrontend/PanoptesFrontend.csproj index a24229f..9c62f3a 100644 --- a/src/PanoptesFrontend/PanoptesFrontend.csproj +++ b/src/PanoptesFrontend/PanoptesFrontend.csproj @@ -8,6 +8,7 @@ + diff --git a/src/PanoptesFrontend/Program.cs b/src/PanoptesFrontend/Program.cs index 641d87b..24bb72d 100644 --- a/src/PanoptesFrontend/Program.cs +++ b/src/PanoptesFrontend/Program.cs @@ -7,8 +7,8 @@ var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); -builder.Services.AddSingleton(); builder.Services.AddHttpClient(); +builder.Services.AddSingleton(); var app = builder.Build();