add ids filter
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -58,7 +58,7 @@ public abstract class BaseChildItemHandler<TEntity, TParent, TUpdateMsg>(IApiSer
|
||||
else
|
||||
entities = server.Manager.Get<TEntity>();
|
||||
|
||||
entities = SortEntities(entities);
|
||||
entities = SortEntities(FilterByIDs(entities, ids));
|
||||
|
||||
if (offset > 0)
|
||||
entities = entities.Skip(offset);
|
||||
|
||||
@@ -79,6 +79,16 @@ public abstract class BaseHandler<TEntity, TUpdateMsg>(IApiServer server)
|
||||
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 IDataObject ToClient(TEntity entity);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
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)
|
||||
entities = entities.Skip(offset);
|
||||
if (amount > 0)
|
||||
|
||||
Reference in New Issue
Block a user