Beispiel #1
0
        public async Task <IList <CurseResponse> > GetCursesAsync(CurseRequest request)
        {
            var cursesDb = await _context.Curses.Where(x => x.Created >= DateTime.Now.AddHours(-1)).ToListAsync();

            return((from object enumValue in typeof(PeriodEnum).GetEnumValues()
                    select Enum.Parse <PeriodEnum>(enumValue.ToString() ?? string.Empty)
                    into type
                    select GetCursesByTime(cursesDb, type, request)).ToList());
        }
Beispiel #2
0
        public async Task SaveCurseAsync(CurseRequest request)
        {
            if (request.From == request.To)
            {
                await _context.Curses.AddAsync(new Curse
                                               { Value = 1, CurrenciesFrom = request.From, CurrenciesTo = request.To });

                await _context.SaveChangesAsync();

                return;
            }

            var query = $"{_url}{request.ToStringCurse()}&compact=ultra&apiKey={_apiKey}";

            var result = await _httpClientProxy.GetAsync <CurseFromConverterResponse>(query);

            await _context.Curses.AddAsync(new Curse
                                           { Value = result.Value, CurrenciesFrom = request.From, CurrenciesTo = request.To });

            await _context.SaveChangesAsync();
        }
Beispiel #3
0
        /// <summary>
        /// Получаем отсортированный список курсов для выбранного периода и курса из переданного списка курсов в БД
        /// </summary>
        /// <param name="cursesDb"> список курсов из БД </param>
        /// <param name="periodEnum"> период за который необходимо взять информацию </param>
        /// <param name="curseRequest"> валюта </param>
        /// <returns></returns>
        private static CurseResponse GetCursesByTime(IEnumerable <Curse> cursesDb, PeriodEnum periodEnum, CurseRequest curseRequest)
        {
            var result = cursesDb.Where(x => x.Created >= DateTime.Now.AddMinutes(-(int)periodEnum) &&
                                        x.CurrenciesFrom == curseRequest.From &&
                                        x.CurrenciesTo == curseRequest.To)
                         .OrderBy(x => x.Created)
                         .Select(x => x.Value).ToList();

            return(new CurseResponse
            {
                Key = curseRequest.ToStringCurse(),
                FirstValue = result.FirstOrDefault(),
                LastValue = result.LastOrDefault(),
                MaxValue = !result.Any() ? 0 : result.Max(),
                MinValue = !result.Any() ? 0 : result.Min(),
                PeriodEnum = periodEnum
            });
        }
Beispiel #4
0
 public static string ToStringCurse(this CurseRequest request)
 {
     return($"{request.From.DescriptionAttr()}_{request.To.DescriptionAttr()}");
 }