public Task <List <object> > MapEntityAsync(object item) { if (item is TradesConverter.Contract.TradeLogItem model) { var converted = new TradeLogItem { TradeId = model.TradeId, UserId = model.UserId, //model.HashedUserId, WalletId = model.WalletId, Direction = model.Direction.ToString(), OrderType = model.OrderType, OrderId = model.OrderId, Asset = model.Asset, Volume = model.Volume, Price = model.Price, DateTime = model.DateTime, OppositeOrderId = model.OppositeOrderId, OppositeAsset = model.OppositeAsset, OppositeVolume = model.OppositeVolume, IsHidden = model.IsHidden, }; if (model.WalletType == "Trading") { converted.WalletId = converted.UserId; } if (model.Fee != null) { converted.Fee = new TradeLogItemFee { FromClientId = model.Fee.FromClientId, ToClientId = model.Fee.ToClientId, DateTime = model.Fee.DateTime, Volume = (decimal)model.Fee.Volume, Asset = model.Fee.Asset, Type = model.Fee.Type, SizeType = model.Fee.SizeType, Size = model.Fee.Size.HasValue ? (decimal)model.Fee.Size.Value : (decimal?)null, } } ; item = converted; } return(Task.FromResult(new List <object> { item })); } }
private static void InitCache( TradeLogItem item, DataContext context, ILog log) { _dict?.Clear(); DateTime from = item.DateTime.Date; DateTime to = from.AddDays(1); string query = $"SELECT * FROM dbo.{DataContext.TradesTable} WHERE DateTime >= '{from.ToString(_format)}' AND DateTime < '{to.ToString(_format)}'"; var items = context.Database.GetDbConnection().Query <TradeLogItem>(query).ToList(); _dict = items.GroupBy(i => i.TradeId).ToDictionary(g => g.Key, g => g.ToList()); _cacheDate = from; log.WriteInfo( nameof(InitCache), nameof(TradeSqlFinder), $"Cached {items.Count} items from sql for {from.ToString(_format)}."); }
public static TradeLogItem FindInDb( TradeLogItem item, DataContext context, ILog log) { if (_dict == null || _dict.Count == 0 && item.DateTime.Date != _cacheDate || _dict.Count > 0 && _dict.First().Value.First().DateTime.Date != item.DateTime.Date) { InitCache(item, context, log); } if (!_dict.ContainsKey(item.TradeId)) { return(null); } var fromDb = _dict[item.TradeId].FirstOrDefault(c => c.WalletId == item.WalletId && c.Asset == item.Asset && c.OppositeAsset == item.OppositeAsset); return(fromDb); }