add some default types to de-duplicate similar implmentations
This commit is contained in:
34
Pilz.Net/Api/Client/BaseChildItemClient.cs
Normal file
34
Pilz.Net/Api/Client/BaseChildItemClient.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
30
Pilz.Net/Api/Client/BaseClient.cs
Normal file
30
Pilz.Net/Api/Client/BaseClient.cs
Normal 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);
|
||||
}
|
||||
12
Pilz.Net/Api/Client/BaseItemClient.cs
Normal file
12
Pilz.Net/Api/Client/BaseItemClient.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
9
Pilz.Net/Api/Client/IBaseChildItemClient.cs
Normal file
9
Pilz.Net/Api/Client/IBaseChildItemClient.cs
Normal 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);
|
||||
}
|
||||
10
Pilz.Net/Api/Client/IBaseClient.cs
Normal file
10
Pilz.Net/Api/Client/IBaseClient.cs
Normal 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);
|
||||
}
|
||||
8
Pilz.Net/Api/Client/IBaseItemClient.cs
Normal file
8
Pilz.Net/Api/Client/IBaseItemClient.cs
Normal 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();
|
||||
}
|
||||
Reference in New Issue
Block a user