Пример #1
0
        private async Task ChangeReviewStatusAsync(string[] ids, CustomerReviewStatus status)
        {
            if (!ids.Any())
            {
                return;
            }

            var reviewStatusChanges = new List <ReviewStatusChangeData>();

            using (var repository = _repositoryFactory())
            {
                var reviews = await((ICustomerReviewRepository)repository).GetByIdsAsync(ids);

                foreach (var customerReviewEntity in reviews)
                {
                    reviewStatusChanges.Add(new ReviewStatusChangeData
                    {
                        Id        = customerReviewEntity.Id,
                        ProductId = customerReviewEntity.ProductId,
                        StoreId   = customerReviewEntity.StoreId,
                        OldStatus = (CustomerReviewStatus)customerReviewEntity.ReviewStatus,
                        NewStatus = status
                    });
                    customerReviewEntity.ReviewStatus = (byte)status;
                }

                await repository.UnitOfWork.CommitAsync();

                GenericCachingRegion <CustomerReview> .ExpireRegion();

                await _eventPublisher.Publish(new ReviewStatusChangedEvent(reviewStatusChanges.Select(x =>
                                                                                                      new GenericChangedEntry <ReviewStatusChangeData>(x, EntryState.Modified))));
            }
        }
        public Task <string[]> GetProductIdsOfModifiedReviewsAsync(ChangedReviewsQuery criteria)
        {
            var cacheKey = CacheKey.With(GetType(), nameof(GetProductIdsOfModifiedReviewsAsync), criteria.ModifiedDate.ToString("s"));

            return(_platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async(cacheEntry) =>
            {
                cacheEntry.AddExpirationToken(GenericCachingRegion <CustomerReview> .CreateChangeToken());
                using (var repository = _repositoryFactory())
                {
                    var ids = await((ICustomerReviewRepository)repository).CustomerReviews
                              .Where(r => r.ModifiedDate >= criteria.ModifiedDate)
                              .GroupBy(r => r.ProductId)
                              .Select(x => x.Key)
                              .ToArrayAsync();
                    return ids;
                }
            }));
        }