add some default types to de-duplicate similar implmentations

This commit is contained in:
Pilzinsel64
2025-03-28 10:40:48 +01:00
parent 9a652a343c
commit 8de643b7d1
17 changed files with 555 additions and 7 deletions

View File

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

View File

@@ -0,0 +1,30 @@
using Pilz.Net.Api.Messages;
using Pilz.Net.Data;
namespace Pilz.Net.Api.Client;
public abstract class BaseClient<T>(IApiClient client) : IBaseClient<T> where T : IDataObject
{
public abstract string ApiEndpoint { get; }
public virtual async Task<T> Get(int id)
{
return (await client.SendRequest<GeneralItemMessages<T>.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<T> Save(T item)
{
var generateNew = item.Id == 0;
return (await client.SendRequest<GeneralItemMessages<T>.Item>(
generateNew ? ApiEndpoint : $"{ApiEndpoint}/{item.Id}",
generateNew ? HttpMethod.Post : HttpMethod.Put,
GenerateUpdateMessage(item, generateNew))).EnsureOk().Item;
}
protected abstract ApiMessage GenerateUpdateMessage(T item, bool generateNew);
}

View File

@@ -0,0 +1,12 @@
using Pilz.Net.Api.Messages;
using Pilz.Net.Data;
namespace Pilz.Net.Api.Client;
public abstract class BaseItemClient<T>(IApiClient client) : BaseClient<T>(client), IBaseItemClient<T> where T : IDataObject
{
public virtual async Task<IEnumerable<T>> GetAll()
{
return (await client.SendRequest<GeneralItemMessages<T>.Items>(ApiEndpoint, HttpMethod.Get)).EnsureOk().Items;
}
}

View File

@@ -0,0 +1,9 @@
using Pilz.Net.Data;
namespace Pilz.Net.Api.Client;
public interface IBaseChildItemClient<T> : IBaseClient<T> where T : IDataObject
{
Task<IEnumerable<T>> GetAll(int parentId);
Task<T> Save(T item, int parentId);
}

View File

@@ -0,0 +1,10 @@
using Pilz.Net.Data;
namespace Pilz.Net.Api.Client;
public interface IBaseClient<T> where T : IDataObject
{
Task Delete(int id);
Task<T> Get(int id);
Task<T> Save(T item);
}

View File

@@ -0,0 +1,8 @@
using Pilz.Net.Data;
namespace Pilz.Net.Api.Client;
public interface IBaseItemClient<T> : IBaseClient<T> where T : IDataObject
{
Task<IEnumerable<T>> GetAll();
}