feat(instances): GetInstancesPagedAsync SQL-side filter/order/page

This commit is contained in:
Joseph Doherty
2026-10-22 06:06:27 -04:00
parent 6bcca4b344
commit bc1aca0ee6
3 changed files with 76 additions and 0 deletions
@@ -86,6 +86,38 @@ public class CentralUiRepository : ICentralUiRepository
.ToListAsync(cancellationToken);
}
/// <inheritdoc />
public async Task<(IReadOnlyList<Instance> Rows, int Total)> GetInstancesPagedAsync(
IReadOnlyCollection<int>? siteIds,
int? templateId,
string? search,
int skip,
int take,
CancellationToken cancellationToken = default)
{
var query = _context.Instances.AsNoTracking().AsQueryable();
if (siteIds is not null)
{
var ids = siteIds.ToList();
query = query.Where(i => ids.Contains(i.SiteId));
}
if (templateId.HasValue)
query = query.Where(i => i.TemplateId == templateId.Value);
if (!string.IsNullOrWhiteSpace(search))
query = query.Where(i => i.UniqueName.StartsWith(search));
var total = await query.CountAsync(cancellationToken);
var rows = await query
.OrderBy(i => i.UniqueName)
.Skip(Math.Max(0, skip))
.Take(Math.Max(0, take))
.ToListAsync(cancellationToken);
return (rows, total);
}
/// <inheritdoc />
public async Task<IReadOnlyList<DeploymentRecord>> GetRecentDeploymentsAsync(int count, CancellationToken cancellationToken = default)
{