native amount/offset handling

This commit is contained in:
2025-05-23 11:17:48 +02:00
parent 6712751141
commit c10fca45e6
6 changed files with 39 additions and 7 deletions

View File

@@ -14,6 +14,15 @@ public abstract class BaseChildItemClient<T>(IApiClient client) : BaseClient<T>(
return (await client.SendRequest<GeneralItemMessages<T>.Items>($"{ApiEndpointParent}/{parentId}{ApiEndpointChild}", HttpMethod.Get)).EnsureOk().Items; return (await client.SendRequest<GeneralItemMessages<T>.Items>($"{ApiEndpointParent}/{parentId}{ApiEndpointChild}", HttpMethod.Get)).EnsureOk().Items;
} }
public virtual async Task<IEnumerable<T>> GetAll(int parentId, int offset, int count)
{
return (await client.SendRequest<GeneralItemMessages<T>.Items>(ApiEndpoint, HttpMethod.Get, new ApiParameterCollection
{
["offset"] = offset,
["count"] = count,
})).EnsureOk().Items;
}
public override async Task<T> Save(T item) public override async Task<T> Save(T item)
{ {
if (item.Id == 0) if (item.Id == 0)

View File

@@ -12,6 +12,15 @@ public abstract class BaseClient<T>(IApiClient client) : IBaseClient<T> where T
return (await client.SendRequest<GeneralItemMessages<T>.Items>(ApiEndpoint, HttpMethod.Get)).EnsureOk().Items; return (await client.SendRequest<GeneralItemMessages<T>.Items>(ApiEndpoint, HttpMethod.Get)).EnsureOk().Items;
} }
public virtual async Task<IEnumerable<T>> GetAll(int offset, int amount)
{
return (await client.SendRequest<GeneralItemMessages<T>.Items>(ApiEndpoint, HttpMethod.Get, new ApiParameterCollection
{
["offset"] = offset,
["amount"] = amount,
})).EnsureOk().Items;
}
public virtual async Task<T> Get(int id) public virtual async Task<T> Get(int id)
{ {
return (await client.SendRequest<GeneralItemMessages<T>.Item>($"{ApiEndpoint}/{id}", HttpMethod.Get)).EnsureOk().Item; return (await client.SendRequest<GeneralItemMessages<T>.Item>($"{ApiEndpoint}/{id}", HttpMethod.Get)).EnsureOk().Item;

View File

@@ -5,5 +5,6 @@ namespace Pilz.Net.Api.Client;
public interface IBaseChildItemClient<T> : IBaseClient<T> where T : IDataObject public interface IBaseChildItemClient<T> : IBaseClient<T> where T : IDataObject
{ {
Task<IEnumerable<T>> GetAll(int parentId); Task<IEnumerable<T>> GetAll(int parentId);
Task<IEnumerable<T>> GetAll(int parentId, int offset, int count);
Task<T> Save(T item, int parentId); Task<T> Save(T item, int parentId);
} }

View File

@@ -7,5 +7,6 @@ public interface IBaseClient<T> where T : IDataObject
Task Delete(int id); Task Delete(int id);
Task<T> Get(int id); Task<T> Get(int id);
Task<IEnumerable<T>> GetAll(); Task<IEnumerable<T>> GetAll();
Task<IEnumerable<T>> GetAll(int offset, int amount);
Task<T> Save(T item); Task<T> Save(T item);
} }

View File

@@ -45,20 +45,27 @@ 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) public virtual ApiResult GetAll(int pid, int offset, int amount)
{ {
IQueryable<TEntity> list; IQueryable<TEntity> entities;
if (pid != 0) if (pid != 0)
{ {
if (!server.Manager.Find(pid, out TParent? parentEntity)) if (!server.Manager.Find(pid, out TParent? parentEntity))
return ApiResult.NotFound(); return ApiResult.NotFound();
list = GetChilds(parentEntity).AsQueryable(); entities = GetChilds(parentEntity).AsQueryable();
} }
else else
list = server.Manager.Get<TEntity>(); entities = server.Manager.Get<TEntity>();
return SortEntities(list).ToList().Select(ToClient).ToItemsResult(); entities = SortEntities(entities);
if (offset > 0)
entities = entities.Skip(offset);
if (amount > 0)
entities = entities.Take(amount);
return SortEntities(entities).ToList().Select(ToClient).ToItemsResult();
} }
public virtual ApiResult Post(int pid, TUpdateMsg msg, ApiRequestInfo req) public virtual ApiResult Post(int pid, TUpdateMsg msg, ApiRequestInfo req)

View File

@@ -24,9 +24,14 @@ 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() public virtual ApiResult GetAll(int offset, int amount)
{ {
return SortEntities(server.Manager.Get<TEntity>()).ToList().Select(ToClient).ToItemsResult(); var entities = SortEntities(server.Manager.Get<TEntity>());
if (offset > 0)
entities = entities.Skip(offset);
if (amount > 0)
entities = entities.Take(amount);
return entities.ToList().Select(ToClient).ToItemsResult();
} }
public virtual ApiResult Post(TUpdateMsg msg, ApiRequestInfo req) public virtual ApiResult Post(TUpdateMsg msg, ApiRequestInfo req)