Ejemplo n.º 1
0
 public CurrencyService(
     MainDbContext mainDbContext,
     IMapper mapper,
     ILogger <CurrencyService> logger,
     CoinpaprikaAPI.Client coinpaprikaClient)
 {
     _mainDbContext     = mainDbContext;
     _mapper            = mapper;
     _logger            = logger;
     _coinpaprikaClient = coinpaprikaClient;
 }
Ejemplo n.º 2
0
        public static async Task <TickerInfo> GetTickerInfo(IMemoryCache cache)
        {
            //This stops us spamming the API on failures
            if (_lastFailTime.HasValue && (DateTime.Now - _lastFailTime.Value).TotalMinutes <= 45)
            {
                if (_lastKnownInfo != null)
                {
                    return(_lastKnownInfo);
                }
            }

            if (!cache.TryGetValue("HomeV3Ticker", out object tickerModel))
            {
                bool success = await _lock.WaitAsync(TimeSpan.FromSeconds(1));

                if (!success)
                {
                    return(null);
                }
                try
                {
                    if (!cache.TryGetValue("HomeV3Ticker", out tickerModel))
                    {
                        CoinpaprikaAPI.Client client = new CoinpaprikaAPI.Client();
                        throw new Exception();

                        tickerModel = (await client.GetTickerForIdAsync(@"trac-origintrail")).Value;

                        cache.Set("HomeV3Ticker", tickerModel, TimeSpan.FromMinutes(3));
                        _lastFailTime = null;
                    }
                }
                catch (Exception)
                {
                    _lastFailTime = DateTime.Now;

                    if (_lastKnownInfo != null)
                    {
                        return(_lastKnownInfo);
                    }

                    return(null);
                }
                finally
                {
                    _lock.Release();
                }
            }

            var tickerInfo = _lastKnownInfo = (TickerInfo)tickerModel;

            return(tickerInfo);
        }
Ejemplo n.º 3
0
 public CurrencyService(
     DbContext dbContext,
     IRepository <Currency> currencyRepository,
     IMapper mapper,
     ILogger <CurrencyService> logger,
     CoinpaprikaAPI.Client coinpaprikaClient)
 {
     _dbContext          = dbContext;
     _currencyRepository = currencyRepository;
     _mapper             = mapper;
     _logger             = logger;
     _coinpaprikaClient  = coinpaprikaClient;
 }
Ejemplo n.º 4
0
        public async Task <Dictionary <string, string> > CoinsList()
        {
            client = new CoinpaprikaAPI.Client();
            var coins = await client.GetCoinsAsync();

            string s  = JsonConvert.SerializeObject(coins);
            Value  st = JsonConvert.DeserializeObject <Value>(s);
            Dictionary <string, string> names = new Dictionary <string, string>();
            int lenght = st.value.Count;

            for (int i = 0; i < lenght; i++)
            {
                string low = st.value[i].Name.ToLower();
                names.Add(st.value[i].Id, low);
            }
            return(names);
        }
Ejemplo n.º 5
0
        public async Task <List <string> > Coins()
        {
            client = new CoinpaprikaAPI.Client();
            var coins = await client.GetCoinsAsync();

            string        s     = JsonConvert.SerializeObject(coins);
            Value         st    = JsonConvert.DeserializeObject <Value>(s);
            List <string> names = new List <string>();
            int           lenght;

            if (st.value == null)
            {
                return(null);
            }
            lenght = st.value.Count;
            //int lenght = st.value.Count;
            for (int i = 0; i < lenght; i++)
            {
                names.Add(st.value[i].Name);
            }
            return(names);
        }
Ejemplo n.º 6
0
        public override async Task Execute(Source source)
        {
            Logger.WriteLine(source, "Syncing TRAC Market (USD)");

            DateTime now = DateTime.UtcNow;
            DateTime latestTimestamp;

            await using (var connection = new MySqlConnection(OTHubSettings.Instance.MariaDB.ConnectionString))
            {
                latestTimestamp =
                    connection.ExecuteScalar <DateTime?>(@"select max(ticker_trac.Timestamp) from ticker_trac") ??
                    connection.ExecuteScalar <DateTime>(@"SELECT Min(b.Timestamp) FROM ethblock b
                    where b.Timestamp >= COALESCE((select max(ticker_trac.Timestamp) from ticker_trac), (SELECT Min(b.Timestamp) FROM ethblock b))");
            }

            if ((now - latestTimestamp).TotalHours > 6)
            {
                CoinpaprikaAPI.Client client = new CoinpaprikaAPI.Client();

                await using (var connection = new MySqlConnection(OTHubSettings.Instance.MariaDB.ConnectionString))
                {
                    await connection.OpenAsync();

                    for (DateTime date = latestTimestamp.Date; date.Date <= now; date = date.AddDays(1))
                    {
                        if (date > now)
                        {
                            break;
                        }

                        await TimeConstraint;

                        var tickers = client.GetHistoricalTickerForIdAsync("trac-origintrail",
                                                                           date,
                                                                           date.AddDays(1), 1000, "USD",
                                                                           TickerInterval.SixHours)
                                      .Result;

                        DataTable rawData = new DataTable();
                        rawData.Columns.Add("Timestamp", typeof(DateTime));
                        rawData.Columns.Add("Price", typeof(decimal));

                        if (tickers?.Value == null)
                        {
                            continue;
                        }

                        foreach (var ticker in tickers.Value)
                        {
                            if (ticker.Timestamp.UtcDateTime <= latestTimestamp)
                            {
                                continue;
                            }

                            var row = rawData.NewRow();


                            row["Timestamp"] = ticker.Timestamp.UtcDateTime;
                            row["Price"]     = ticker.Price;
                            rawData.Rows.Add(row);
                        }

                        if (rawData.Rows.Count == 0)
                        {
                            continue;
                        }


                        await using (MySqlTransaction tran =
                                         await connection.BeginTransactionAsync(global::System.Data.IsolationLevel.Serializable))
                        {
                            await using (MySqlCommand cmd = new MySqlCommand())
                            {
                                cmd.Connection  = connection;
                                cmd.Transaction = tran;
                                cmd.CommandText = "SELECT * FROM ticker_trac";
                                using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                                {
                                    //da.UpdateBatchSize = 1000;
                                    using (MySqlCommandBuilder cb = new MySqlCommandBuilder(da))
                                    {
                                        da.Update(rawData);
                                        await tran.CommitAsync();

                                        var max = tickers.Value.Max(v => v.Timestamp.UtcDateTime);
                                        if (max > latestTimestamp)
                                        {
                                            latestTimestamp = max;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }


            await ExecuteEthToUSD(source);

            await ExecuteEth(source);
        }
Ejemplo n.º 7
0
        public async Task <ObjectResult> Information(string id, string cryptoname)
        {
            WebReq   req = new WebReq();
            UserList dBUserItemsDBFind = JsonConvert.DeserializeObject <UserList>(System.IO.File.ReadAllText(path));
            Commands comm = new Commands();

            comm.DBCheck(comm, dBUserItemsDBFind, id);
            if (comm.Exist == false)
            {
                Response.StatusCode = 404;
                return(new ObjectResult(null));
            }
            if (dBUserItemsDBFind == null)
            {
                Response.StatusCode = 404;
            }
            client = new CoinpaprikaAPI.Client();
            var coins = await client.GetCoinsAsync();

            string s  = JsonConvert.SerializeObject(coins);
            Value  st = JsonConvert.DeserializeObject <Value>(s);
            Dictionary <string, string> names = new Dictionary <string, string>();
            int lenght = st.value.Count;

            for (int i = 0; i < lenght; i++)
            {
                st.value[i].Name = st.value[i].Name.ToLower();
                names.Add(st.value[i].Id, st.value[i].Name);
            }
            string temp2 = names.FirstOrDefault(x => x.Value == cryptoname).Key;

            if (temp2 == null)
            {
                Response.StatusCode = 404;
                return(new ObjectResult(null));
            }
            string        real     = dBUserItemsDBFind.users[comm.Index].Real;
            List <string> cryptos  = new List <string>();
            UserShow      userShow = await req.GetTickers(dBUserItemsDBFind, comm.Index, real);

            int  cryind = 0;
            bool exist  = false;

            for (int i = 0; i < userShow.Ticker.Count; i++)
            {
                string t = userShow.Ticker[i].Name.ToLower();
                if (t == cryptoname)
                {
                    cryind = i;
                    exist  = true;
                }
            }
            if (exist == true)
            {
                return(new ObjectResult(userShow.Ticker[cryind]));
            }
            else
            {
                Response.StatusCode = 404;
                return(new ObjectResult(null));
            }
        }
Ejemplo n.º 8
0
        public async Task <ObjectResult> UserEditDeleteCrypto(string ids, string crypto)
        {
            UserList dBUserItemsDBFind = JsonConvert.DeserializeObject <UserList>(System.IO.File.ReadAllText(path));
            Commands comm = new Commands();

            comm.DBCheck(comm, dBUserItemsDBFind, ids);
            if (comm.Exist == false)
            {
                Response.StatusCode = 404;
                return(new ObjectResult(null));
            }
            if (dBUserItemsDBFind == null)
            {
                Response.StatusCode = 404;
            }
            //if (dBUserItemsDBFind == null)
            //{
            //    Response.StatusCode = 404;
            //}
            //bool cont = false;
            //int ind = 0;
            //for (int i = 0; i < dBUserItemsDBFind.users.Count; i++)
            //{
            //    if (dBUserItemsDBFind.users[i].Id == ids)
            //    {
            //        ind = i;
            //        cont = true;
            //        break;
            //    }
            //}
            //if (cont == false)
            //{
            //    Response.StatusCode = 404;
            //    return new ObjectResult(null);
            //}
            client = new CoinpaprikaAPI.Client();
            var coins = await client.GetCoinsAsync();

            string s  = JsonConvert.SerializeObject(coins);
            Value  st = JsonConvert.DeserializeObject <Value>(s);
            Dictionary <string, string> names = new Dictionary <string, string>();
            int lenght = st.value.Count;

            for (int i = 0; i < lenght; i++)
            {
                st.value[i].Name = st.value[i].Name.ToLower();
                names.Add(st.value[i].Id, st.value[i].Name);
            }
            string low = crypto.ToLower();
            string cid = names.FirstOrDefault(x => x.Value == low).Key;

            if (cid != null)
            {
                bool ex = false;
                for (int i = 0; i < dBUserItemsDBFind.users[comm.Index].Currency.Count; i++)
                {
                    if (dBUserItemsDBFind.users[comm.Index].Currency[i].Crypto == cid)
                    {
                        if (dBUserItemsDBFind.users[comm.Index].Currency.Count == 1)
                        {
                            Response.StatusCode = 405;
                            return(new ObjectResult(null));
                        }
                        ex = true;
                        dBUserItemsDBFind.users[comm.Index].Currency.RemoveAt(i);
                        await System.IO.File.WriteAllTextAsync(path, JsonConvert.SerializeObject(dBUserItemsDBFind, Formatting.Indented));

                        return(new ObjectResult(null));
                    }
                }
                if (ex == false)
                {
                    Response.StatusCode = 404;
                    return(new ObjectResult(null));
                }
            }
            if (cid == null)
            {
                Response.StatusCode = 404;
                return(new ObjectResult(null));
            }
            return(new ObjectResult(null));
        }
Ejemplo n.º 9
0
        public async Task <ObjectResult> UserEdit([FromBody] UserCurrencyToChange item, string ids)
        {
            WebReq   req = new WebReq();
            UserList dBUserItemsDBFind = JsonConvert.DeserializeObject <UserList>(System.IO.File.ReadAllText(path));
            Commands comm = new Commands();

            comm.DBCheck(comm, dBUserItemsDBFind, ids);
            if (comm.Exist == false)
            {
                Response.StatusCode = 404;
                return(new ObjectResult(null));
            }
            if (dBUserItemsDBFind == null)
            {
                Response.StatusCode = 404;
            }
            //bool cont = false;
            //int comm.Index = 0;
            //for (int i = 0; i < dBUserItemsDBFind.users.Count; i++)
            //{
            //    if (dBUserItemsDBFind.users[i].Id == ids)
            //    {
            //        comm = i;
            //        cont = true;
            //        break;
            //    }
            //}
            //if (cont == false)
            //{
            //    Response.StatusCode = 404;
            //    return new ObjectResult(null);
            //}
            //if(item.real != null)
            //{
            //    item.real = comm.InputCheckReal(item.real);
            //}
            //if (item.crypto != null)
            //{
            //    item.crypto = comm.InputCheckCrypto(item.crypto);
            //}
            //if (item.crypto_to_change != null)
            //{
            //    item.crypto_to_change = comm.InputCheckCrypto(item.crypto_to_change);
            //}
            client = new CoinpaprikaAPI.Client();
            var coins = await client.GetCoinsAsync();

            string s  = JsonConvert.SerializeObject(coins);
            Value  st = JsonConvert.DeserializeObject <Value>(s);
            Dictionary <string, string> names = new Dictionary <string, string>();
            int lenght = st.value.Count;

            for (int i = 0; i < lenght; i++)
            {
                st.value[i].Name = st.value[i].Name.ToLower();
                names.Add(st.value[i].Id, st.value[i].Name);
            }
            string temp  = names.FirstOrDefault(x => x.Value == item.crypto_to_change).Key;
            string temp2 = names.FirstOrDefault(x => x.Value == item.crypto).Key;

            if (temp != null)
            {
                temp = temp.ToLower();
            }
            if (temp2 != null)
            {
                temp2 = temp2.ToLower();
            }
            item.crypto = temp;
            if (item.real != null)
            {
                item.real = item.real.ToLower();
            }
            string item2  = item.real;
            var    status = await req.RealCheck(item2);

            if (status == HttpStatusCode.BadRequest)
            {
                Response.StatusCode = 400;
                return(new ObjectResult(null));
            }
            if (item2 != null)
            {
                string[]      cur  = dBUserItemsDBFind.users[comm.Index].Real.Split(new char[] { ',' });
                List <string> list = new List <string>(cur);
                for (int i = 0; i < list.Count; i++)
                {
                    if (list[i] == item2)
                    {
                        Response.StatusCode = 409;
                        return(new ObjectResult(null));
                    }
                }
                list.Add(item2);
                string output = string.Join(",", list);
                dBUserItemsDBFind.users[comm.Index].Real = output;
                await System.IO.File.WriteAllTextAsync(path, JsonConvert.SerializeObject(dBUserItemsDBFind, Formatting.Indented));

                if (temp == null || temp2 == null)
                {
                    return(new ObjectResult(null));
                }
            }
            if (temp != null && temp2 != null)
            {
                for (int i = 0; i < dBUserItemsDBFind.users[comm.Index].Currency.Count; i++)
                {
                    if (dBUserItemsDBFind.users[comm.Index].Currency[i].Crypto == temp)
                    {
                        if (temp == temp2)
                        {
                            Response.StatusCode = 409;
                            return(new ObjectResult(null));
                        }
                        for (int j = 0; j < dBUserItemsDBFind.users[comm.Index].Currency.Count; j++)
                        {
                            if (temp2 == dBUserItemsDBFind.users[comm.Index].Currency[j].Crypto)
                            {
                                Response.StatusCode = 409;
                                return(new ObjectResult(null));
                            }
                        }
                        if (temp != temp2)
                        {
                            dBUserItemsDBFind.users[comm.Index].Currency[i].Crypto = temp2;
                            await System.IO.File.WriteAllTextAsync(path, JsonConvert.SerializeObject(dBUserItemsDBFind, Formatting.Indented));

                            return(new ObjectResult(null));
                        }
                    }
                }
                Response.StatusCode = 404;
                return(new ObjectResult(null));
            }
            else
            {
                Response.StatusCode = 404;
                return(new ObjectResult(null));
            }
        }
Ejemplo n.º 10
0
        public async Task <ObjectResult> AddCrypto([FromBody] UserCurrency item, string id)
        {
            UserList dBUserItemsDBFind = JsonConvert.DeserializeObject <UserList>(System.IO.File.ReadAllText(path));
            Commands comm = new Commands();

            comm.DBCheck(comm, dBUserItemsDBFind, id);
            if (comm.Exist == false)
            {
                Response.StatusCode = 404;
                return(new ObjectResult(null));
            }
            client = new CoinpaprikaAPI.Client();
            var coins = await client.GetCoinsAsync();

            string s  = JsonConvert.SerializeObject(coins);
            Value  st = JsonConvert.DeserializeObject <Value>(s);
            Dictionary <string, string> names = new Dictionary <string, string>();
            int lenght = st.value.Count;

            for (int i = 0; i < lenght; i++)
            {
                st.value[i].Name = st.value[i].Name.ToLower();
                names.Add(st.value[i].Id, st.value[i].Name);
            }
            item.crypto = item.crypto.ToLower();
            item.crypto = names.FirstOrDefault(x => x.Value == item.crypto).Key;
            string item1 = item.crypto;

            if (item1 == null)
            {
                Response.StatusCode = 400;
                return(new ObjectResult(null));
            }
            if (dBUserItemsDBFind.users[comm.Index].Currency == null)
            {
                UserMoney p1 = new UserMoney
                {
                    Crypto = item1,
                };
                List <UserMoney> users = new List <UserMoney>();
                users.Add(p1);
                dBUserItemsDBFind.users[comm.Index].Currency = users;
                await System.IO.File.WriteAllTextAsync(path, JsonConvert.SerializeObject(dBUserItemsDBFind, Formatting.Indented));
            }
            else
            {
                for (int i = 0; i < dBUserItemsDBFind.users[comm.Index].Currency.Count; i++)
                {
                    if (dBUserItemsDBFind.users[comm.Index].Currency[i].Crypto == item1)
                    {
                        Response.StatusCode = 409;
                        item1 = null;
                        return(new ObjectResult(null));
                    }
                }
                dBUserItemsDBFind.users[comm.Index].Currency.Add(new UserMoney()
                {
                    Crypto = item1
                });
            }
            if (dBUserItemsDBFind.users[comm.Index].Real == null)
            {
                dBUserItemsDBFind.users[comm.Index].Real = "usd";
            }
            await System.IO.File.WriteAllTextAsync(path, JsonConvert.SerializeObject(dBUserItemsDBFind, Formatting.Indented));

            return(new ObjectResult(null));
        }
 public CoinpaprikaHealthCheck(CoinpaprikaAPI.Client coinpaprikaClient)
 {
     _coinpaprikaClient = coinpaprikaClient;
 }