private async Task ProcessMessageAsync(CashInEvent message)
        {
            var fees = message.CashIn.Fees;
            var fee  = fees?.FirstOrDefault()?.Transfer;

            var entity = new Cashin()
            {
                AssetId = message.CashIn.AssetId,
                //BlockchainHash = ,
                FeeSize   = ParseNullabe(fee?.Volume),
                Id        = Guid.Parse(message.Header.RequestId),
                State     = HistoryState.Finished,
                Timestamp = message.Header.Timestamp,
                Volume    = Math.Abs(decimal.Parse(message.CashIn.Volume)),
                WalletId  = Guid.Parse(message.CashIn.WalletId)
            };

            if (!await _historyRecordsRepository.TryInsertAsync(entity))
            {
                _log.Warning($"Skipped duplicated cashin record", context: new
                {
                    id = message.Header.RequestId
                });
            }
        }
        private async Task <(Guid, List <BaseHistoryRecord>)> GenerateData(string[] pairs, string[] assets)
        {
            var walletId = Guid.NewGuid();
            var random   = new Random();

            const int cashinsCount  = 5;
            const int cashoutsCount = 3;
            const int tradesCount   = 20;

            var list = new List <BaseHistoryRecord>();

            for (var i = 0; i < cashinsCount; i++)
            {
                var cashin = new Cashin
                {
                    Id        = Guid.NewGuid(),
                    WalletId  = walletId,
                    AssetId   = assets[random.Next(assets.Length)],
                    State     = HistoryState.Finished,
                    Timestamp = DateTime.UtcNow,
                    Volume    = random.Next(1, 100)
                };

                list.Add(cashin);
            }

            for (var i = 0; i < cashoutsCount; i++)
            {
                var cashout = new Cashout
                {
                    Id        = Guid.NewGuid(),
                    WalletId  = walletId,
                    AssetId   = assets[random.Next(assets.Length)],
                    State     = HistoryState.Finished,
                    Timestamp = DateTime.UtcNow,
                    Volume    = -random.Next(1, 100)
                };

                list.Add(cashout);
            }

            for (var i = 0; i < tradesCount; i++)
            {
                var cashout = new Trade
                {
                    Id             = Guid.NewGuid(),
                    WalletId       = walletId,
                    BaseAssetId    = assets[random.Next(assets.Length)],
                    Timestamp      = DateTime.UtcNow,
                    BaseVolume     = -random.Next(1, 100),
                    QuotingAssetId = assets[random.Next(assets.Length)],
                    QuotingVolume  = random.Next(1, 50),
                    AssetPairId    = pairs[random.Next(pairs.Length)],
                    OrderId        = Guid.NewGuid(),
                    Price          = random.Next() * 100
                };

                list.Add(cashout);
            }

            var repo = _container.Resolve <IHistoryRecordsRepository>();

            await repo.InsertBulkAsync(list);

            return(walletId, list);
        }