From e673483ef5e62aa081cd819ef671861c86f2a8ed Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Wed, 14 May 2025 14:27:18 +0200 Subject: [PATCH] lazy-get parent on PUT --- Pilz.Net/Api/Server/BaseChildItemHandler.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Pilz.Net/Api/Server/BaseChildItemHandler.cs b/Pilz.Net/Api/Server/BaseChildItemHandler.cs index de3da07..f108cf3 100644 --- a/Pilz.Net/Api/Server/BaseChildItemHandler.cs +++ b/Pilz.Net/Api/Server/BaseChildItemHandler.cs @@ -12,9 +12,11 @@ public abstract class BaseChildItemHandler(IApiSer where TParent : class, IDataObject where TUpdateMsg : ApiMessage { - public class ChildEntityUpdate(TEntity entity, TParent parent, TUpdateMsg message, ApiRequestInfo reqest) : EntityUpdate(entity, message, reqest) + public class ChildEntityUpdate(TEntity entity, Func getParent, TUpdateMsg message, ApiRequestInfo reqest) : EntityUpdate(entity, message, reqest) { - public TParent Parent { get; } = parent; + private readonly Func getParent = getParent; + private TParent? parent; + public TParent? Parent => parent ??= getParent(); } protected virtual bool RegisterGetAll => true; @@ -51,7 +53,7 @@ public abstract class BaseChildItemHandler(IApiSer if (!server.Manager.Find(parent, out TParent? parentEntity)) return ApiResult.NotFound(); var entity = CreateNewEntity(msg, parentEntity); - var update = new ChildEntityUpdate(entity, parentEntity, msg, req); + var update = new ChildEntityUpdate(entity, () => parentEntity, msg, req); if (UpdateEntity(update) is ApiResult result) return result; GetChilds(parentEntity).Add(entity); @@ -62,11 +64,9 @@ public abstract class BaseChildItemHandler(IApiSer public override ApiResult Put(int id, TUpdateMsg msg, ApiRequestInfo req) { - if (server.Manager.Get().FirstOrDefault(n => GetChilds(n).Any(n => n.Id == id)) is not TParent parentEntity) - return ApiResult.NotFound(); if (!server.Manager.Find(id, out TEntity? entity)) return ApiResult.NotFound(); - var update = new ChildEntityUpdate(entity, parentEntity, msg, req); + var update = new ChildEntityUpdate(entity, () => server.Manager.Get().AsEnumerable().FirstOrDefault(n => GetChilds(n).Any(n => n.Id == id)), msg, req); if (UpdateEntity(update) is ApiResult result) return result; if (OnSave(update) is ApiResult result2) @@ -81,7 +81,7 @@ public abstract class BaseChildItemHandler(IApiSer protected override ApiResult? OnSave(EntityUpdate update) { - if (update.Entity.Id == 0 && update is ChildEntityUpdate updateEx) + if (update.Entity.Id == 0 && update is ChildEntityUpdate updateEx && updateEx.Parent != null) { server.Manager.Save(updateEx.Parent, true); return null;