feat(instances): GetInstancesPagedAsync SQL-side filter/order/page
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user