Knocks/BackEnd/Knoks.Core/Data/Dao/ExchangeDao.cs

96 lines
4.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Knoks.Core.Data.Interfaces;
using Knoks.Core.Entities;
using Knoks.Framework.DataAccess;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Knoks.Core.Data.Dao
{
public class ExchangeDao : IExchangeDao
{
private IProcExecutor executor;
public ExchangeDao(IProcExecutor executor)
{
this.executor = executor;
}
public async Task<IEnumerable<Currency>> GetCurrencies(string currency)
{
return (await executor.Go("BO_Currencies", new { currency })).Тables[0].ToList<Currency>();
}
public async Task<IEnumerable<Currency>> GetFilterCurrencies(long? userId, bool? availableKnoks, bool? activeKnoks, bool? endedKnoks)
{
return (await executor.Go("BO_FilterCurrencies", new { availableKnoks, activeKnoks, endedKnoks, userId })).Тables[0].ToList<Currency>();
}
public async Task<IEnumerable<Exchange>> GetExchanges(long? userId, bool? availableKnoks, bool? activeKnoks, bool? endedKnoks, int? exchangeId = null )
{
var res = await executor.Go("BO_ExchangeCurrencies", new { ExchangeId = exchangeId, AvailableKnoks = availableKnoks ?? false, ActiveKnoks = activeKnoks ?? false, EndedKnoks = endedKnoks ?? false, UserId = userId });
var r = res.Тables[0].ToList<ExchangeData>().GroupBy(it => new { id = it.ExchangeId, name = it.ExchangeName });
return r.Select(it =>
new Exchange()
{
ExchangeId = it.Key.id,
ExchangeName = it.Key.name,
CurrencyPairs = it
.Select(c =>new CurrencyPair() {
Currency1 = c.Currency1,
Currency2 = c.Currency2,
Currency = c.Currency,
DisplayName = c.TickerDisplayName
}).ToList()
}
);
}
public async Task<TickerInfo> GetTicker(int tickerId)
{
return (await executor.Go("BO_GetTickers", new { TickerId = tickerId })).Тables[0].ToList<TickerInfo>().First();
}
public async Task<TickerInfo> GetTicker(int exchangeId, string currency1, string currency2)
{
return (await executor.Go("BO_GetTickers", new { TickerId = (int?)null, ExchangeId = exchangeId, Currency1 = currency1, Currency2 = currency2 })).Тables[0].ToList<TickerInfo>().First();
}
public async Task<IEnumerable<TickerInfo>> GetTickers()
{
return (await executor.Go("BO_GetTickers")).Тables[0].ToList<TickerInfo>();
}
public async Task<TickerInfo> SaveExchanges(TickerData data)
{
return (await executor.Go("Agg_1Minute", data)).Тables[0].ToList<TickerInfo>().First();
}
public async Task SaveTickers(int exchangeId, IEnumerable<Ticker> data)
{
await Task.Run(() =>
{
var list = GetExchanges(null, null, null, null, exchangeId).GetAwaiter().GetResult();
var current = list?.SingleOrDefault();
if (current != null)
{
var active = data.ToList();
var add = active.Where(it => !current.CurrencyPairs.Any(e => e.Currency1 == it.Currency1 && e.Currency2 == it.Currency2)).ToList();
var remove = current.CurrencyPairs.Where(it => !active.Any(e => e.Currency1 == it.Currency1 && e.Currency2 == it.Currency2)).ToList();
add.ForEach(it => executor.Go("BO_AddTicker", it, new { ExchangeId = exchangeId }));
remove.ForEach(it => executor.Go("BO_RemoveTicker", new { ExchangeId = exchangeId, it.Currency1, it.Currency2 }));
}
});
}
private class ExchangeData
{
public short ExchangeId { get; set; }
public string ExchangeName { get; set; }
public string Currency1 { get; set; }
public string Currency2 { get; set; }
public string Currency { get; set; }
public string TickerDisplayName { get; set; }
}
}
}