public async Task <IList <HistoryElement> > GetHistoryAsync(string assetId, Contract.TimeInterval timeInterval)
        {
            var key = GetHistoryCacheKey(assetId, timeInterval);

            if (!_assetIdIntervalsHistoriesCache.ContainsKey(key))
            {
                return(null);
            }

            var result = _assetIdIntervalsHistoriesCache[key];

            return(result);
        }
        private HistoryElementUpdate Create(string assetId, Contract.TimeInterval timeInterval, DateTime timestamp, decimal value)
        {
            var result = new HistoryElementUpdate
            {
                AssetId        = assetId,
                HistoryElement = new HistoryElement {
                    Timestamp = timestamp, Value = value
                },
                TimeInterval = timeInterval
            };

            return(result);
        }
        private void UpdateHistoryCacheAndPublish(string assetId, Contract.TimeInterval timeInterval, IDictionary <DateTime, decimal> updatedHistory)
        {
            var cacheKey = GetHistoryCacheKey(assetId, timeInterval);

            if (!_assetIdIntervalsHistoriesCache.ContainsKey(cacheKey))
            {
                _assetIdIntervalsHistoriesCache[cacheKey] = Map(updatedHistory);
            }

            var previousHistory = _assetIdIntervalsHistoriesCache[cacheKey];
            var lastTimestampInUpdatedHistory = updatedHistory.Keys.Last();
            var updateExistsInPreviousHistory = previousHistory.Any(x => x.Timestamp == lastTimestampInUpdatedHistory);

            if (!updateExistsInPreviousHistory)
            {
                _assetIdIntervalsHistoriesCache[cacheKey] = Map(updatedHistory);

                // Publish new index history element
                var newHistoryElement = Create(assetId, timeInterval, updatedHistory.Keys.Last(), updatedHistory.Values.Last());
                _indicesHistoryUpdatesPublisher.Publish(newHistoryElement, MapAssetIdToIndexName(assetId));
            }
        }
 private string GetHistoryCacheKey(string assetId, Contract.TimeInterval interval)
 {
     return($"{assetId}-{interval}");
 }