using DbFirst.BlazorWebApp.Models; namespace DbFirst.BlazorWebApp.Services; public class MassDataApiClient : IMassDataApiClient { private readonly HttpClient _httpClient; private const string Endpoint = "api/massdata"; public MassDataApiClient(HttpClient httpClient) { _httpClient = httpClient; } public async Task GetCountAsync(CancellationToken ct = default) { var result = await _httpClient.GetFromJsonAsync("api/massdata/count", ct); return result ?? 0; } public async Task> GetAllAsync(int? skip, int? take, CancellationToken ct = default) { var query = new List(); if (skip.HasValue) { query.Add($"skip={skip.Value}"); } if (take.HasValue) { query.Add($"take={take.Value}"); } var url = query.Count == 0 ? Endpoint : $"{Endpoint}?{string.Join("&", query)}"; var result = await _httpClient.GetFromJsonAsync>(url, ct); return result ?? []; } public async Task> UpsertAsync(MassDataWriteDto dto, CancellationToken ct = default) { var response = await _httpClient.PostAsJsonAsync($"{Endpoint}/upsert", dto, ct); if (response.IsSuccessStatusCode) { var payload = await response.Content.ReadFromJsonAsync(); return ApiResult.Ok(payload); } var error = await ApiClientHelper.ReadErrorAsync(response); return ApiResult.Fail(error); } public async Task GetByCustomerNameAsync(string customerName, CancellationToken ct = default) { if (string.IsNullOrWhiteSpace(customerName)) { return null; } var response = await _httpClient.GetAsync($"{Endpoint}/{Uri.EscapeDataString(customerName)}", ct); if (response.StatusCode == System.Net.HttpStatusCode.NotFound) { return null; } response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync(); } }