diff --git a/Pilz.Net/Api/Server/BaseChildItemHandler.cs b/Pilz.Net/Api/Server/BaseChildItemHandler.cs index c2fbb19..debc357 100644 --- a/Pilz.Net/Api/Server/BaseChildItemHandler.cs +++ b/Pilz.Net/Api/Server/BaseChildItemHandler.cs @@ -37,12 +37,12 @@ public abstract class BaseChildItemHandler(IApiSer return list.ToList().Select(ToClient).ToItemsResult(); } - public virtual ApiResult Post(int parent, TUpdateMsg msg) + public virtual ApiResult Post(int parent, TUpdateMsg msg, ApiRequestInfo req) { if (!server.Manager.Find(parent, out TParent? parentEntity)) return ApiResult.NotFound(); var entity = CreateNewEntity(msg); - if (UpdateEntity(entity, msg) is ApiResult result) + if (UpdateEntity(new(entity, msg, req)) is ApiResult result) return result; GetChilds(parentEntity).Add(entity); server.Manager.Save(parentEntity, true); diff --git a/Pilz.Net/Api/Server/BaseHandler.cs b/Pilz.Net/Api/Server/BaseHandler.cs index c10c206..8c414cc 100644 --- a/Pilz.Net/Api/Server/BaseHandler.cs +++ b/Pilz.Net/Api/Server/BaseHandler.cs @@ -10,6 +10,13 @@ public abstract class BaseHandler(IApiServer server) where TEntity : class, IDataObject where TUpdateMsg : ApiMessage { + public class EntityUpdate(TEntity entity, TUpdateMsg updateMsg, ApiRequestInfo reqest) + { + public TEntity Entity { get; } = entity; + public TUpdateMsg UpdateMsg { get; } = updateMsg; + public ApiRequestInfo Request { get; } = reqest; + } + public abstract string Route { get; } protected virtual bool RegisterGet => true; protected virtual bool RegisterPut => true; @@ -33,11 +40,11 @@ public abstract class BaseHandler(IApiServer server) return ToClient(entity).ToItemResult(); } - public virtual ApiResult Put(int id, TUpdateMsg msg) + public virtual ApiResult Put(int id, TUpdateMsg msg, ApiRequestInfo req) { if (!server.Manager.Find(id, out TEntity? entity)) return ApiResult.NotFound(); - if (UpdateEntity(entity, msg) is ApiResult result) + if (UpdateEntity(new(entity, msg, req)) is ApiResult result) return result; server.Manager.Save(entity, true); return ToClient(entity).ToItemResult(); @@ -54,7 +61,7 @@ public abstract class BaseHandler(IApiServer server) return Activator.CreateInstance(); } - protected abstract ApiResult? UpdateEntity(TEntity entity, TUpdateMsg msg); + protected abstract ApiResult? UpdateEntity(EntityUpdate update); protected abstract IDataObject ToClient(TEntity entity); } diff --git a/Pilz.Net/Api/Server/BaseItemHandler.cs b/Pilz.Net/Api/Server/BaseItemHandler.cs index 4adf6ff..461abe6 100644 --- a/Pilz.Net/Api/Server/BaseItemHandler.cs +++ b/Pilz.Net/Api/Server/BaseItemHandler.cs @@ -29,10 +29,10 @@ public abstract class BaseItemHandler(IApiServer server) return server.Manager.Get().ToList().Select(ToClient).ToItemsResult(); } - public virtual ApiResult Post(TUpdateMsg msg) + public virtual ApiResult Post(TUpdateMsg msg, ApiRequestInfo req) { var entity = CreateNewEntity(msg); - if (UpdateEntity(entity, msg) is ApiResult result) + if (UpdateEntity(new(entity, msg, req)) is ApiResult result) return result; server.Manager.Save(entity, true); return ToClient(entity).ToItemResult(HttpStatusCode.Created);