From 76d385e235ff029f376c0819f37246801377c9ae Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Tue, 24 Jun 2025 07:36:00 +0200 Subject: [PATCH] add ids filter --- Pilz.Net/Api/Server/BaseChildItemHandler.cs | 4 ++-- Pilz.Net/Api/Server/BaseHandler.cs | 10 ++++++++++ Pilz.Net/Api/Server/BaseItemHandler.cs | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Pilz.Net/Api/Server/BaseChildItemHandler.cs b/Pilz.Net/Api/Server/BaseChildItemHandler.cs index 4d3e0c1..668dfb4 100644 --- a/Pilz.Net/Api/Server/BaseChildItemHandler.cs +++ b/Pilz.Net/Api/Server/BaseChildItemHandler.cs @@ -45,7 +45,7 @@ public abstract class BaseChildItemHandler(IApiSer server.RegisterHandler(t.GetMethod(nameof(Post))!.CreateDelegate(this), new(RouteParent + "/{pid}" + RouteChild, "POST"), Debugger.IsAttached); } - public virtual ApiResult GetAll(int pid, int offset, int amount) + public virtual ApiResult GetAll(int pid, string? ids, int offset, int amount) { IQueryable entities; @@ -58,7 +58,7 @@ public abstract class BaseChildItemHandler(IApiSer else entities = server.Manager.Get(); - entities = SortEntities(entities); + entities = SortEntities(FilterByIDs(entities, ids)); if (offset > 0) entities = entities.Skip(offset); diff --git a/Pilz.Net/Api/Server/BaseHandler.cs b/Pilz.Net/Api/Server/BaseHandler.cs index 828464d..8f598e5 100644 --- a/Pilz.Net/Api/Server/BaseHandler.cs +++ b/Pilz.Net/Api/Server/BaseHandler.cs @@ -79,6 +79,16 @@ public abstract class BaseHandler(IApiServer server) return Activator.CreateInstance(); } + protected virtual IQueryable FilterByIDs(IQueryable entities, string? idsStr) + { + if (idsStr != null) + { + var ids = idsStr.Split(',').Select(n => int.TryParse(n, out var v) ? v : default); + return entities.Where(n => ids.Contains(n.Id)); + } + return entities; + } + 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 08ef5d3..eeb5e75 100644 --- a/Pilz.Net/Api/Server/BaseItemHandler.cs +++ b/Pilz.Net/Api/Server/BaseItemHandler.cs @@ -24,9 +24,9 @@ public abstract class BaseItemHandler(IApiServer server) server.RegisterHandler(t.GetMethod(nameof(Post))!.CreateDelegate(this), new(Route, "POST"), Debugger.IsAttached); } - public virtual ApiResult GetAll(int offset, int amount) + public virtual ApiResult GetAll(string? ids, int offset, int amount) { - var entities = SortEntities(server.Manager.Get()); + var entities = SortEntities(FilterByIDs(server.Manager.Get(), ids)); if (offset > 0) entities = entities.Skip(offset); if (amount > 0)