using DbFirst.BlazorWebApp.Models; using DbFirst.Contracts.Catalogs; namespace DbFirst.BlazorWebApp.Services; public class CatalogApiClient(HttpClient httpClient) : ICatalogApiClient { private const string Endpoint = "api/catalogs"; 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); } }