using Pilz.Data; using Pilz.Net.Api.Messages; namespace Pilz.Net.Api.Client; public abstract class BaseClient(IApiClient client) : IBaseClient where T : IDataObject { public abstract string ApiEndpoint { get; } public virtual async Task> GetAll() { return (await client.SendRequest.Items>(ApiEndpoint, HttpMethod.Get)).EnsureOk().Items; } public virtual async Task Get(int id) { return (await client.SendRequest.Item>($"{ApiEndpoint}/{id}", HttpMethod.Get)).EnsureOk().Item; } public virtual async Task Delete(int id) { (await client.SendRequest($"{ApiEndpoint}/{id}", HttpMethod.Delete)).EnsureOk(); } public virtual async Task Save(T item) { var generateNew = item.Id == 0; return (await client.SendRequest.Item>( generateNew ? ApiEndpoint : $"{ApiEndpoint}/{item.Id}", generateNew ? HttpMethod.Post : HttpMethod.Put, GenerateUpdateMessage(item, generateNew))).EnsureOk().Item; } protected abstract ApiMessage GenerateUpdateMessage(T item, bool generateNew); }