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; } })); }