From b494f2fb8dad688096fe124f9c846f3d3b3eaa67 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Wed, 14 May 2025 09:56:05 +0200 Subject: [PATCH] add more virtual methods for base handler --- Pilz.Net/Api/Server/BaseChildItemHandler.cs | 30 +++++++++++++++++---- Pilz.Net/Api/Server/BaseHandler.cs | 12 ++++++--- Pilz.Net/Api/Server/BaseItemHandler.cs | 13 ++++++--- 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/Pilz.Net/Api/Server/BaseChildItemHandler.cs b/Pilz.Net/Api/Server/BaseChildItemHandler.cs index dd2836c..a9e346a 100644 --- a/Pilz.Net/Api/Server/BaseChildItemHandler.cs +++ b/Pilz.Net/Api/Server/BaseChildItemHandler.cs @@ -39,7 +39,7 @@ public abstract class BaseChildItemHandler(IApiSer else list = server.Manager.Get(); - return list.ToList().Select(ToClient).ToItemsResult(); + return SortEntities(list).ToList().Select(ToClient).ToItemsResult(); } public virtual ApiResult Post(int parent, TUpdateMsg msg, ApiRequestInfo req) @@ -47,10 +47,12 @@ public abstract class BaseChildItemHandler(IApiSer if (!server.Manager.Find(parent, out TParent? parentEntity)) return ApiResult.NotFound(); var entity = CreateNewEntity(msg, parentEntity); - if (UpdateEntity(new ChildEntityUpdate(entity, parentEntity, msg, req)) is ApiResult result) + var update = new ChildEntityUpdate(entity, parentEntity, msg, req); + if (UpdateEntity(update) is ApiResult result) return result; GetChilds(parentEntity).Add(entity); - server.Manager.Save(parentEntity, true); + if (OnSave(update) is ApiResult result2) + return result2; return ToClient(entity).ToItemResult(HttpStatusCode.Created); } @@ -60,9 +62,11 @@ public abstract class BaseChildItemHandler(IApiSer return ApiResult.NotFound(); if (!server.Manager.Find(id, out TEntity? entity)) return ApiResult.NotFound(); - if (UpdateEntity(new ChildEntityUpdate(entity, parentEntity, msg, req)) is ApiResult result) + var update = new ChildEntityUpdate(entity, parentEntity, msg, req); + if (UpdateEntity(update) is ApiResult result) return result; - server.Manager.Save(entity, true); + if (OnSave(update) is ApiResult result2) + return result2; return ToClient(entity).ToItemResult(); } @@ -71,5 +75,21 @@ public abstract class BaseChildItemHandler(IApiSer return CreateNewEntity(msg); } + protected override ApiResult? OnSave(EntityUpdate update) + { + if (update.Entity.Id == 0 && update is ChildEntityUpdate updateEx) + { + server.Manager.Save(updateEx.Parent, true); + return null; + } + else + return base.OnSave(update); + } + public abstract IList GetChilds(TParent parent); + + protected virtual IQueryable SortEntities(IQueryable entities) + { + return entities; + } } diff --git a/Pilz.Net/Api/Server/BaseHandler.cs b/Pilz.Net/Api/Server/BaseHandler.cs index b47c797..441e98a 100644 --- a/Pilz.Net/Api/Server/BaseHandler.cs +++ b/Pilz.Net/Api/Server/BaseHandler.cs @@ -44,9 +44,11 @@ public abstract class BaseHandler(IApiServer server) { if (!server.Manager.Find(id, out TEntity? entity)) return ApiResult.NotFound(); - if (UpdateEntity(new(entity, msg, req)) is ApiResult result) + var update = new EntityUpdate(entity, msg, req); + if (UpdateEntity(update) is ApiResult result) return result; - server.Manager.Save(entity, true); + if (OnSave(update) is ApiResult result2) + return result2; return ToClient(entity).ToItemResult(); } @@ -63,7 +65,11 @@ public abstract class BaseHandler(IApiServer server) return null; } - protected virtual ApiResult? OnSave(TEntity entity, TUpdateMsg update) + protected virtual ApiResult? OnSave(EntityUpdate update) + { + server.Manager.Save(update.Entity, true); + return null; + } protected virtual TEntity CreateNewEntity(TUpdateMsg msg) { diff --git a/Pilz.Net/Api/Server/BaseItemHandler.cs b/Pilz.Net/Api/Server/BaseItemHandler.cs index 461abe6..7bd23b5 100644 --- a/Pilz.Net/Api/Server/BaseItemHandler.cs +++ b/Pilz.Net/Api/Server/BaseItemHandler.cs @@ -26,15 +26,22 @@ public abstract class BaseItemHandler(IApiServer server) public virtual ApiResult GetAll() { - return server.Manager.Get().ToList().Select(ToClient).ToItemsResult(); + return SortEntities(server.Manager.Get()).ToList().Select(ToClient).ToItemsResult(); } public virtual ApiResult Post(TUpdateMsg msg, ApiRequestInfo req) { var entity = CreateNewEntity(msg); - if (UpdateEntity(new(entity, msg, req)) is ApiResult result) + var update = new EntityUpdate(entity, msg, req); + if (UpdateEntity(update) is ApiResult result) return result; - server.Manager.Save(entity, true); + if (OnSave(update) is ApiResult result2) + return result2; return ToClient(entity).ToItemResult(HttpStatusCode.Created); } + + protected virtual IQueryable SortEntities(IQueryable entities) + { + return entities; + } }