using System.Net; using System.Net.Http.Json; using DbFirst.BlazorWebApp.Models; namespace DbFirst.BlazorWebApp.Services; public class CatalogApiClient { private readonly HttpClient _httpClient; private const string Endpoint = "api/catalogs"; public CatalogApiClient(HttpClient httpClient) { _httpClient = httpClient; } public async Task> GetAllAsync() { var result = await _httpClient.GetFromJsonAsync>(Endpoint); return result ?? new List(); } public async Task GetByIdAsync(int id) { return await _httpClient.GetFromJsonAsync($"{Endpoint}/{id}"); } public async Task> CreateAsync(CatalogWriteDto dto) { var response = await _httpClient.PostAsJsonAsync(Endpoint, dto); 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) { var response = await _httpClient.PutAsJsonAsync($"{Endpoint}/{id}", dto); if (response.IsSuccessStatusCode) { return ApiResult.Ok(true); } var error = await ApiClientHelper.ReadErrorAsync(response); return ApiResult.Fail(error); } public async Task> DeleteAsync(int id) { var response = await _httpClient.DeleteAsync($"{Endpoint}/{id}"); if (response.IsSuccessStatusCode) { return ApiResult.Ok(true); } var error = await ApiClientHelper.ReadErrorAsync(response); return ApiResult.Fail(error); } } public record ApiResult(bool Success, T? Value, string? Error) { public static ApiResult Ok(T? value) => new(true, value, null); public static ApiResult Fail(string? error) => new(false, default, error); }