using DbFirst.BlazorWebApp.Models; using DbFirst.Contracts.MassData; using Microsoft.AspNetCore.WebUtilities; namespace DbFirst.BlazorWebApp.Services; public class MassDataApiClient(HttpClient httpClient) : IMassDataApiClient { private const string Endpoint = "api/massdata"; 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 Dictionary(); if (skip.HasValue) query["skip"] = skip.Value.ToString(); if (take.HasValue) query["take"] = take.Value.ToString(); var url = QueryHelpers.AddQueryString(Endpoint, 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(); } }