using DbFirst.BlazorWebApp.Models; namespace DbFirst.BlazorWebApp.Services; public class CatalogApiClient : ICatalogApiClient { private readonly HttpClient _httpClient; private const string Endpoint = "api/catalogs"; public CatalogApiClient(HttpClient httpClient) { _httpClient = httpClient; } public async Task> GetAllAsync(CancellationToken ct = default) { var result = await _httpClient.GetFromJsonAsync>(Endpoint, ct); return result ?? []; } public async Task GetByIdAsync(int id, CancellationToken ct = default) { return await _httpClient.GetFromJsonAsync($"{Endpoint}/{id}", ct); } public async Task> CreateAsync(CatalogWriteDto dto, CancellationToken ct = default) { var response = await _httpClient.PostAsJsonAsync(Endpoint, 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> UpdateAsync(int id, CatalogWriteDto dto, CancellationToken ct = default) { var response = await _httpClient.PutAsJsonAsync($"{Endpoint}/{id}", dto, ct); if (response.IsSuccessStatusCode) { return ApiResult.Ok(true); } var error = await ApiClientHelper.ReadErrorAsync(response); return ApiResult.Fail(error); } public async Task> DeleteAsync(int id, CancellationToken ct = default) { var response = await _httpClient.DeleteAsync($"{Endpoint}/{id}", ct); if (response.IsSuccessStatusCode) { return ApiResult.Ok(true); } var error = await ApiClientHelper.ReadErrorAsync(response); return ApiResult.Fail(error); } }