private async Task <List <Manufacturer> > GetManufacturers(IReadOnlyCollection <string> manufacturerIds) { List <Manufacturer> cachedManufacturers = new(); var notCachedManufacturerIds = manufacturerIds.ToList(); foreach (var manufacturerId in manufacturerIds) { var cacheKey = $"Manufacturer-{manufacturerId}"; var cache = await _cacheService.GetStringAsync(cacheKey); if (!string.IsNullOrEmpty(cache)) { var cachedManufacturer = JsonSerializer.Deserialize <Manufacturer>(cache); cachedManufacturers.Add(cachedManufacturer); notCachedManufacturerIds.Remove(manufacturerId); } } var manufacturersInDb = await _manufacturerRepository.GetRangeAsync(m => notCachedManufacturerIds.Contains(m.Id)); foreach (var manufacturerDto in manufacturersInDb) { await _cacheService.SetCacheAsync($"Manufacturer-{manufacturerDto.Id}", manufacturerDto, _manufacturerSettings); } manufacturersInDb.AddRange(cachedManufacturers); return(manufacturersInDb); }
public async Task <Result <List <ManufacturerDto> > > Handle(GetManufacturersCommand request, CancellationToken cancellationToken) { var manufacturersInDb = await _manufacturerRepository.GetRangeAsync(request.Predicate); var manufacturers = _mapper.Map <List <ManufacturerDto> >(manufacturersInDb); return(Result <List <ManufacturerDto> > .Success(manufacturers)); }