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,39 @@
using Pilz.Extensions.Reflection;
using Pilz.Net.Data;
using Pilz.Net.Extensions;
using System.Diagnostics;
namespace Pilz.Net.Api.Server;
public abstract class BaseItemHandler<TEntity, TUpdateMsg>(IApiServer server)
: BaseHandler<TEntity, TUpdateMsg>(server)
where TEntity : IDataObject
where TUpdateMsg : ApiMessage
{
protected virtual bool RegisterGetAll => true;
protected virtual bool RegisterPost => true;
public override void Initialize(IApiServer server)
{
base.Initialize(server);
var t = GetType();
if (RegisterGetAll)
server.RegisterHandler(t.GetMethod(nameof(GetAll))!.CreateDelegate(this), new(Route, "GET"), Debugger.IsAttached);
if (RegisterPost)
server.RegisterHandler(t.GetMethod(nameof(Put))!.CreateDelegate(this), new(Route, "POST"), Debugger.IsAttached);
}
public virtual ApiResult GetAll()
{
return server.Manager.Get<TEntity>().ToList().Select(ToClient).ToItemsResult();
}
public virtual ApiResult Post(TUpdateMsg msg)
{
var entity = CreateNewEntity();
if (UpdateEntity(entity, msg) is ApiResult result)
return result;
server.Manager.Save(entity, true);
return entity.ToItemResult();
}
}