add ids filter

This commit is contained in:
Pilzinsel64
2025-06-24 07:36:00 +02:00
parent c3a137aebd
commit 76d385e235
3 changed files with 14 additions and 4 deletions

View File

@@ -45,7 +45,7 @@ public abstract class BaseChildItemHandler<TEntity, TParent, TUpdateMsg>(IApiSer
server.RegisterHandler(t.GetMethod(nameof(Post))!.CreateDelegate(this), new(RouteParent + "/{pid}" + RouteChild, "POST"), Debugger.IsAttached); 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<TEntity> entities; IQueryable<TEntity> entities;
@@ -58,7 +58,7 @@ public abstract class BaseChildItemHandler<TEntity, TParent, TUpdateMsg>(IApiSer
else else
entities = server.Manager.Get<TEntity>(); entities = server.Manager.Get<TEntity>();
entities = SortEntities(entities); entities = SortEntities(FilterByIDs(entities, ids));
if (offset > 0) if (offset > 0)
entities = entities.Skip(offset); entities = entities.Skip(offset);

View File

@@ -79,6 +79,16 @@ public abstract class BaseHandler<TEntity, TUpdateMsg>(IApiServer server)
return Activator.CreateInstance<TEntity>(); return Activator.CreateInstance<TEntity>();
} }
protected virtual IQueryable<TEntity> FilterByIDs(IQueryable<TEntity> 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 ApiResult? UpdateEntity(EntityUpdate update);
protected abstract IDataObject ToClient(TEntity entity); protected abstract IDataObject ToClient(TEntity entity);

View File

@@ -24,9 +24,9 @@ public abstract class BaseItemHandler<TEntity, TUpdateMsg>(IApiServer server)
server.RegisterHandler(t.GetMethod(nameof(Post))!.CreateDelegate(this), new(Route, "POST"), Debugger.IsAttached); 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<TEntity>()); var entities = SortEntities(FilterByIDs(server.Manager.Get<TEntity>(), ids));
if (offset > 0) if (offset > 0)
entities = entities.Skip(offset); entities = entities.Skip(offset);
if (amount > 0) if (amount > 0)