public UsdGeneratorJob(int exchangeId, int fromCurrencyId, int toCurrencyId, decimal price) { _borsaCurrency = new BorsaCurrencyT() { FromCurrencyId = fromCurrencyId, ToCurrencyId = toCurrencyId, Price = price, BorsaId = exchangeId }; }
public void Execute(admin_zeegzagContext db) { var usdtId = CachingService.CurrencyIdByName("USDT", () => db.CurrencyT.FirstOrDefault(c => c.ShortName == "USDT")?.Id); if (UsdConverters == null) { UsdConverters = db.BorsaCurrencyT .Where(bc => bc.FromCurrencyId == usdtId && (bc.ToCurrency.ShortName == "BTC" || bc.ToCurrency.ShortName == "ETH")) .ToList() .ToLookup(bc => bc.BorsaId, bc => bc); } var borsaId = _borsaCurrency.BorsaId; var fromId = _borsaCurrency.FromCurrencyId; var toId = _borsaCurrency.ToCurrencyId; //if has its own usd converter from this market if (db.BorsaCurrencyT.Any(bc => bc.BorsaId == borsaId && bc.FromCurrencyId == usdtId && bc.ToCurrencyId == toId && bc.AutoGenerated != true)) { return; } var converter = UsdConverters[_borsaCurrency.BorsaId].FirstOrDefault(bc => bc.ToCurrencyId == fromId); //USD-BTC == BTC-MCO //From-To == From-To if (converter == null) { return; } var rate = converter.Price; var price = _borsaCurrency.Price * rate; BorsaCurrencyT generated; var key = _borsaCurrency.BorsaId + "-" + _borsaCurrency.ToCurrencyId; if (Cache.ContainsKey(key)) { generated = Cache[key]; } else { generated = db.BorsaCurrencyT.FirstOrDefault(bc => bc.BorsaId == borsaId && bc.FromCurrencyId == usdtId && bc.ToCurrencyId == toId); if (generated == null) { generated = new BorsaCurrencyT() { BorsaId = _borsaCurrency.BorsaId, FromCurrencyId = usdtId.Value, ToCurrencyId = toId, AutoGenerated = true, }; try { db.BorsaCurrencyT.Add(generated); } catch (Exception e) { Console.WriteLine("Error on add: " + e); } Cache[key] = generated; } else { if (generated.LastUpdate.HasValue) { db.HistoryT.Add(new HistoryT() { BorsaCurrencyId = generated.Id, EntryDate = generated.LastUpdate.Value, Price = generated.Price, }); } } } generated.Price = price; generated.LastUpdate = DateTime.Now; }