Beispiel #1
0
        public virtual async Task SaveCustomerReviewsAsync(CustomerReview[] items)
        {
            if (items == null)
            {
                throw new ArgumentNullException(nameof(items));
            }

            using (var repository = _repositoryFactory())
            {
                var pkMap = new PrimaryKeyResolvingMap();
                var alreadyExistEntities = await repository.GetByIdsAsync(items.Where(m => !m.IsTransient()).Select(x => x.Id).ToArray());

                foreach (var derivativeContract in items)
                {
                    var sourceEntity = AbstractTypeFactory <CustomerReviewEntity> .TryCreateInstance().FromModel(derivativeContract, pkMap);

                    var targetEntity = alreadyExistEntities.FirstOrDefault(x => x.Id == sourceEntity.Id);
                    if (targetEntity != null)
                    {
                        sourceEntity.Patch(targetEntity);
                    }
                    else
                    {
                        repository.Add(sourceEntity);
                    }
                }

                await repository.UnitOfWork.CommitAsync();

                pkMap.ResolvePrimaryKeys();
            }

            CustomerReviewCacheRegion.ExpireRegion();
        }
        public async Task <CustomerReviewSearchResult> SearchCustomerReviewsAsync(CustomerReviewSearchCriteria criteria)
        {
            var cacheKey = CacheKey.With(GetType(), nameof(SearchCustomerReviewsAsync), criteria.GetCacheKey());

            return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                cacheEntry.AddExpirationToken(CustomerReviewCacheRegion.CreateChangeToken());
                var result = AbstractTypeFactory <CustomerReviewSearchResult> .TryCreateInstance();
                using (var repository = _repositoryFactory())
                {
                    var query = BuildQuery(repository, criteria);
                    var sortInfos = BuildSortExpression(criteria);

                    result.TotalCount = await query.CountAsync();
                    if (criteria.Take > 0)
                    {
                        var customerReviewIds = await query.OrderBySortInfos(sortInfos).ThenBy(x => x.Id)
                                                .Select(x => x.Id)
                                                .Skip(criteria.Skip).Take(criteria.Take)
                                                .ToArrayAsync();

                        var unorderedResults = await _customerReviewService.GetByIdsAsync(customerReviewIds);
                        result.Results = unorderedResults.OrderBy(x => Array.IndexOf(customerReviewIds, x.Id)).ToArray();
                    }
                }
                return result;
            }));
        }
        public void CreateCustomerCustomerReviewChangeToken_ShouldThrowException_IfCustomerIdIsNull()
        {
            //arrange
            string customerId = null;

            //act
            Action act = () => CustomerReviewCacheRegion.CreateCustomerCustomerReviewChangeToken(customerId);

            //assert
            act.Should().Throw <ArgumentNullException>().And.ParamName.Should().Be(nameof(customerId));
        }
        public void CreateCustomerCustomerReviewChangeToken_ShouldReturnCompositeChangeToken_IfCustomerIdIsNotNull()
        {
            //arrange
            var customerId = randomizer.Create <string>();

            //act
            var result = CustomerReviewCacheRegion.CreateCustomerCustomerReviewChangeToken(customerId);

            //assert
            result.Should().BeEquivalentTo(
                new CompositeChangeToken(new[]
            {
                new CancellationChangeToken((new CancellationTokenSource()).Token),
                new CancellationChangeToken((new CancellationTokenSource()).Token)
            }));
        }
Beispiel #5
0
        public virtual async Task DeleteCustomerReviewsAsync(string[] ids)
        {
            using (var repository = _repositoryFactory())
            {
                var items = await repository.GetByIdsAsync(ids);

                foreach (var item in items)
                {
                    repository.Remove(item);
                }

                await repository.UnitOfWork.CommitAsync();

                CustomerReviewCacheRegion.ExpireRegion();
            }
        }
Beispiel #6
0
        public virtual async Task <CustomerReview[]> GetByIdsAsync(string[] ids)
        {
            var cacheKey = CacheKey.With(GetType(), "GetByIdsAsync", string.Join("-", ids));

            return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                cacheEntry.AddExpirationToken(CustomerReviewCacheRegion.CreateChangeToken());

                using (var repository = _repositoryFactory())
                {
                    repository.DisableChangesTracking();

                    return (await repository.GetByIdsAsync(ids)).Select(x => x.ToModel(AbstractTypeFactory <CustomerReview> .TryCreateInstance())).ToArray();
                }
            }));
        }
 public CustomerReviewCacheRegionTests()
 {
     randomizer        = new Fixture();
     reviewCacheRegion = new CustomerReviewCacheRegion();
 }