public async Task <GetForeignExchangeRateResponse> Handle(GetForeignExchangeRateRequest request, CancellationToken cancellationToken)
        {
            var response = new GetForeignExchangeRateResponse();

            var publicationDate = _publicationDateService.GetPublicationDate(request.Date);

            string cacheKey = _foreignExchangeRatesService.GetCacheKey(request.Base, request.Date, publicationDate);

            var dateAsInt = Convert.ToInt32(request.Date);

            var foreignExchangeRates = await _cachingService.GetOrCreateAsync
                                       (
                cacheKey,
                () => {
                return(_unitOfWork.ForeignExchangeRate
                       .GetWhereAsync(x => x.BaseCurrency == request.Base && x.Date == dateAsInt && x.PublicationDate == publicationDate));
            },
                AppConstants.CacheDurationInHourForeignExchangeRatesOfCurrency
                                       );

            if (ListExtensions.IsNullOrEmpty(foreignExchangeRates))
            {
                foreignExchangeRates = await _foreignExchangeRatesService.GetForeignExchangeRateModels(request.Base, request.Date);

                var foreignExchangeRatesToDelete = await _unitOfWork.ForeignExchangeRate.GetWhereAsync(x => x.BaseCurrency == request.Base && x.Date == dateAsInt && x.PublicationDate == publicationDate);

                await _unitOfWork.ForeignExchangeRate.BulkSaveAsync(foreignExchangeRates, foreignExchangeRatesToDelete);

                if (!ListExtensions.IsNullOrEmpty(foreignExchangeRates) || !ListExtensions.IsNullOrEmpty(foreignExchangeRatesToDelete))
                {
                    await _unitOfWork.CompleteAsync();
                }

                await _cachingService.SetAsync(cacheKey, foreignExchangeRates);
            }

            if (ListExtensions.IsNullOrEmpty(foreignExchangeRates))
            {
                foreignExchangeRates = new List <ForeignExchangeRateModel>();
            }

            response.Data = _foreignExchangeRatesService.ToInverseRatesDto(request.Base, foreignExchangeRates);

            return(response);
        }