using DeepDrftModels.DTOs; using NetBlocks.Models; using System.Text.Json; namespace DeepDrftPublic.Client.Clients; /// /// HTTP client for the public stats read surface. Uses the named "DeepDrft.API" client like /// and : on WASM it points at the public host and /// proxies through StatsProxyController; on SSR prerender it points directly at DeepDrftAPI. The /// route is an unauthenticated read; the response deserializes as a bare DTO (no ApiResultDto envelope), /// matching the API's Ok(value) shape. /// public class StatsClient { private static readonly JsonSerializerOptions JsonOptions = new() { PropertyNameCaseInsensitive = true }; private readonly HttpClient _http; public StatsClient(IHttpClientFactory httpClientFactory) { _http = httpClientFactory.CreateClient("DeepDrft.API"); } public async Task> GetHomeStats() { var response = await _http.GetAsync("api/stats/home"); if (!response.IsSuccessStatusCode) return ApiResult.CreateFailResult($"HTTP {(int)response.StatusCode}"); var json = await response.Content.ReadAsStringAsync(); var stats = JsonSerializer.Deserialize(json, JsonOptions); return stats is not null ? ApiResult.CreatePassResult(stats) : ApiResult.CreateFailResult("Failed to deserialize response"); } }