Exemplo n.º 1
0
        public virtual async Task <Contact> GetContactByIdAsync(string contactId)
        {
            if (contactId == null)
            {
                throw new ArgumentNullException(nameof(contactId));
            }

            Contact result   = null;
            var     cacheKey = CacheKey.With(GetType(), "GetContactByIdAsync", contactId);
            var     dto      = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                var contactDto = await _customerApi.GetContactByIdAsync(contactId);
                if (contactDto != null)
                {
                    cacheEntry.AddExpirationToken(CustomerCacheRegion.CreateChangeToken(contactDto.Id));
                    cacheEntry.AddExpirationToken(_apiChangesWatcher.CreateChangeToken());
                }
                return(contactDto);
            });

            if (dto != null)
            {
                result = dto.ToContact();
                if (!dto.Organizations.IsNullOrEmpty())
                {
                    //Load contact organization
                    result.Organization = await GetOrganizationByIdAsync(dto.Organizations.FirstOrDefault());
                }
            }
            return(result);
        }
        public virtual async Task <Contact> GetContactByIdAsync(string contactId)
        {
            Contact result   = null;
            var     cacheKey = CacheKey.With(GetType(), "GetContactByIdAsync", contactId);
            var     dto      = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                var contactDto = await _customerApi.GetContactByIdAsync(contactId);
                if (contactDto != null)
                {
                    cacheEntry.AddExpirationToken(CustomerCacheRegion.CreateChangeToken(contactDto.Id));
                }
                return(contactDto);
            });

            if (dto != null)
            {
                result               = dto.ToContact();
                result.Orders        = LazyLoadCustomerOrders(result);
                result.QuoteRequests = LazyLoadCustomerQuotes(result);
                result.Subscriptions = LazyLoadCustomerSubscriptions(result);
            }
            return(result);
        }