public virtual async Task <GenericSearchResult <CustomerOrder> > SearchCustomerOrdersAsync(CustomerOrderSearchCriteria criteria) { var cacheKey = CacheKey.With(GetType(), "SearchCustomerOrdersAsync", criteria.GetCacheKey()); return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(OrderSearchCacheRegion.CreateChangeToken()); using (var repository = _repositoryFactory()) { repository.DisableChangesTracking(); var retVal = new GenericSearchResult <CustomerOrder>(); var orderResponseGroup = EnumUtility.SafeParse(criteria.ResponseGroup, CustomerOrderResponseGroup.Full); var query = GetOrdersQuery(repository, criteria); var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = ReflectionUtility.GetPropertyName <CustomerOrderEntity>(x => x.CreatedDate), SortDirection = SortDirection.Descending } }; } query = query.OrderBySortInfos(sortInfos); retVal.TotalCount = await query.CountAsync(); var orderIds = await query.Select(x => x.Id).Skip(criteria.Skip).Take(criteria.Take).ToArrayAsync(); var list = await repository.GetCustomerOrdersByIdsAsync(orderIds, orderResponseGroup); retVal.Results = list.Select(x => x.ToModel(AbstractTypeFactory <CustomerOrder> .TryCreateInstance()) as CustomerOrder).ToList(); return retVal; } })); }
public async Task SaveChangesAsync_UpdateOrder() { //Arrange var criteria = new CustomerOrderSearchCriteria() { Take = 1, Status = "Pending" }; var cacheKeySearch = CacheKey.With(_customerOrderSearchService.GetType(), "SearchCustomerOrdersAsync", criteria.GetCacheKey()); _platformMemoryCacheMock.Setup(pmc => pmc.CreateEntry(cacheKeySearch)).Returns(_cacheEntryMock.Object); var orders = await _customerOrderSearchService.SearchCustomerOrdersAsync(criteria); var order = orders.Results.FirstOrDefault(); var cacheKey = CacheKey.With(_customerOrderService.GetType(), "GetByIdsAsync", string.Join("-", order.Id), null); _platformMemoryCacheMock.Setup(pmc => pmc.CreateEntry(cacheKey)).Returns(_cacheEntryMock.Object); order.Status = "Authorized"; //Act await _customerOrderService.SaveChangesAsync(new[] { order }); //Assert Assert.NotNull(order); Assert.Equal("Authorized", order.Status); }
public virtual async Task <CustomerOrderSearchResult> SearchCustomerOrdersAsync(CustomerOrderSearchCriteria criteria) { var cacheKey = CacheKey.With(GetType(), nameof(SearchCustomerOrdersAsync), criteria.GetCacheKey()); return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(OrderSearchCacheRegion.CreateChangeToken()); using (var repository = _repositoryFactory()) { repository.DisableChangesTracking(); var result = AbstractTypeFactory <CustomerOrderSearchResult> .TryCreateInstance(); var query = BuildQuery(repository, criteria); var sortInfos = BuildSortExpression(criteria); result.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { var orderIds = await query.OrderBySortInfos(sortInfos).ThenBy(x => x.Id) .Select(x => x.Id) .Skip(criteria.Skip).Take(criteria.Take) .ToArrayAsync(); var unorderedResults = await _customerOrderService.GetByIdsAsync(orderIds, criteria.ResponseGroup); result.Results = unorderedResults.OrderBy(x => Array.IndexOf(orderIds, x.Id)).ToList(); } return result; } })); }