public StructureBuilder(string instanceTag, IBlobSaver blobSaver)
 {
     _instanceTag = instanceTag;
     _blobSaver   = blobSaver;
     _columnData  = OutOrderbookEntry.GetStructure()
                    .Select(p => new ColumnInfo
     {
         ColumnName = p.Item1,
         ColumnType = p.Item2
     })
                    .ToList();
 }
        public async Task ProcessAsync(InConnectorOrderbook book)
        {
            var directory = _dynamicStructure.GetDirectoryName(book.Asset);

            if (!_assetPairsDict.ContainsKey(directory))
            {
                _assetPairsDict.Add(directory, new Dictionary <int, List <string> >());
                await _dynamicStructure.UpdateStructureIfRequiredAsync(book.Asset);
            }

            var bookId = Guid.NewGuid().ToString();
            var items  = new List <string>();

            if (book.Asks != null)
            {
                foreach (var ask in book.Asks)
                {
                    var askEntry = new OutOrderbookEntry
                    {
                        BookId    = bookId,
                        Source    = book.Source,
                        Asset     = book.Asset,
                        Timestamp = DateTimeConverter.Convert(book.Timestamp),
                        IsAsk     = true,
                        Price     = (decimal)ask.Price,
                        Volume    = (decimal)ask.Volume,
                    };
                    items.Add(askEntry.GetValuesString());
                }
            }
            if (book.Bids != null)
            {
                foreach (var bid in book.Bids)
                {
                    var bidEntry = new OutOrderbookEntry
                    {
                        BookId    = bookId,
                        Source    = book.Source,
                        Asset     = book.Asset,
                        Timestamp = DateTimeConverter.Convert(book.Timestamp),
                        IsAsk     = false,
                        Price     = (decimal)bid.Price,
                        Volume    = (decimal)bid.Volume,
                    };
                    items.Add(bidEntry.GetValuesString());
                }
            }

            var minutesDict = _assetPairsDict[directory];
            int minuteKey   = GetMinuteKey(book.Timestamp);

            int pairItemsCount = minutesDict.Sum(i => i.Value.Count);

            if (pairItemsCount >= _maxBatchCount)
            {
                var allItemsFromOtherMinutes = minutesDict.Keys.Where(k => k != minuteKey).SelectMany(i => minutesDict[i]).ToList();
                await _messagesHandler(directory, allItemsFromOtherMinutes);

                minutesDict.Clear();
            }

            minutesDict[minuteKey] = items;
        }