Ejemplo n.º 1
0
        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;
                }
            }));
        }
Ejemplo n.º 2
0
        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;
                }
            }));
        }