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