using Pilz.Data; using Pilz.Net.Api.Messages; namespace Pilz.Net.Api.Client; public abstract class BaseChildItemClient(IApiClient client) : BaseClient(client), IBaseChildItemClient where T : IDataObject { public override string ApiEndpoint => ApiEndpointParent + ApiEndpointChild; public abstract string ApiEndpointParent { get; } public abstract string ApiEndpointChild { get; } public virtual async Task> GetAll(int parentId) { return (await client.SendRequest.Items>($"{ApiEndpointParent}/{parentId}{ApiEndpointChild}", HttpMethod.Get)).EnsureOk().Items; } public virtual async Task> GetAll(int parentId, int offset, int count) { return (await client.SendRequest.Items>(ApiEndpoint, HttpMethod.Get, new ApiParameterCollection { ["offset"] = offset, ["count"] = count, })).EnsureOk().Items; } public override async Task Save(T item) { if (item.Id == 0) throw new NullReferenceException("Item has no parent yet!"); return await base.Save(item); } public virtual async Task Save(T item, int parentId) { if (item.Id != 0) return await Save(item); return (await client.SendRequest.Item>( $"{ApiEndpointParent}/{parentId}{ApiEndpointChild}", HttpMethod.Post, GenerateUpdateMessage(item, true))).EnsureOk().Item; } }