public async Task <PaymentRequestData[]> FindPaymentRequests(PaymentRequestQuery query, CancellationToken cancellationToken = default) { using var context = _ContextFactory.CreateContext(); var queryable = context.PaymentRequests.Include(data => data.StoreData).AsQueryable(); if (!query.IncludeArchived) { queryable = queryable.Where(data => !data.Archived); } if (!string.IsNullOrEmpty(query.StoreId)) { queryable = queryable.Where(data => data.StoreDataId == query.StoreId); } if (query.Status != null && query.Status.Any()) { queryable = queryable.Where(data => query.Status.Contains(data.Status)); } if (query.Ids != null && query.Ids.Any()) { queryable = queryable.Where(data => query.Ids.Contains(data.Id)); } if (!string.IsNullOrEmpty(query.UserId)) { queryable = queryable.Where(i => i.StoreData != null && i.StoreData.UserStores.Any(u => u.ApplicationUserId == query.UserId)); } queryable = queryable.OrderByDescending(u => u.Created); if (query.Skip.HasValue) { queryable = queryable.Skip(query.Skip.Value); } if (query.Count.HasValue) { queryable = queryable.Take(query.Count.Value); } var items = await queryable.ToArrayAsync(cancellationToken); return(items); }
public async Task <(int Total, PaymentRequestData[] Items)> FindPaymentRequests(PaymentRequestQuery query, CancellationToken cancellationToken = default) { using (var context = _ContextFactory.CreateContext()) { var queryable = context.PaymentRequests.Include(data => data.StoreData).AsQueryable(); if (!string.IsNullOrEmpty(query.StoreId)) { queryable = queryable.Where(data => data.StoreDataId.Equals(query.StoreId, StringComparison.InvariantCulture)); } if (query.Status != null && query.Status.Any()) { queryable = queryable.Where(data => query.Status.Contains(data.Status)); } if (!string.IsNullOrEmpty(query.UserId)) { queryable = queryable.Where(i => i.StoreData != null && i.StoreData.UserStores.Any(u => u.ApplicationUserId == query.UserId)); } var total = await queryable.CountAsync(cancellationToken); queryable = queryable.OrderByDescending(u => u.Created); if (query.Skip.HasValue) { queryable = queryable.Skip(query.Skip.Value); } if (query.Count.HasValue) { queryable = queryable.Take(query.Count.Value); } return(total, await queryable.ToArrayAsync(cancellationToken)); } }