Exemplo n.º 1
0
 public async Task GetHistoricalCurrencyValuesAsync(
     [Summary("moneda", "Código de la moneda.")]
     [Autocomplete(typeof(FiatCurrencyCodeAutocompleteHandler))]
     string codigo,
     [Summary("desde", "Fecha desde.")]
     string startDate,
     [Summary("hasta", "Fecha hasta.")]
     string endDate
     )
 {
     await DeferAsync().ContinueWith(async(task) =>
     {
         try
         {
             string currencyCode = Format.Sanitize(codigo).ToUpper().Trim();
             List <WorldCurrencyCodeResponse> historicalCurrencyCodeList = await FiatCurrencyService.GetWorldCurrenciesList();
             WorldCurrencyCodeResponse worldCurrencyCodeResponse         = historicalCurrencyCodeList.FirstOrDefault(x => x.Code.Equals(currencyCode, StringComparison.OrdinalIgnoreCase));
             if (worldCurrencyCodeResponse != null)
             {
                 TimeSpan oneYear    = TimeSpan.FromDays(366);
                 bool validStartDate = FiatCurrencyService.ParseDate(startDate, out DateTime? startDateResult) && startDateResult.HasValue;
                 bool validEndDate   = FiatCurrencyService.ParseDate(endDate, out DateTime? endDateResult) && endDateResult.HasValue;
                 if (validStartDate && validEndDate)
                 {
                     DateTime dateFrom = startDateResult.Value;
                     DateTime dateTo   = endDateResult.Value;
                     if (dateFrom <= dateTo && (dateTo.Subtract(dateFrom) <= oneYear))
                     {
                         List <WorldCurrencyResponse> historicalCurrencyValues = await FiatCurrencyService.GetHistoricalCurrencyValues(currencyCode, dateFrom, dateTo);
                         if (historicalCurrencyValues != null && historicalCurrencyValues.Count > 0)
                         {
                             List <EmbedBuilder> embeds = FiatCurrencyService.CreateHistoricalValuesEmbedsAsync(historicalCurrencyValues, worldCurrencyCodeResponse.Name, dateFrom, dateTo);
                             await SendDeferredPaginatedEmbedAsync(embeds);
                         }
                         else
                         {
                             await SendNoDataForRangeAsync(dateFrom, dateTo);
                         }
                     }
                     else
                     {
                         await SendInvalidDateRangeParametersAsync(dateFrom, dateTo);
                     }
                 }
                 else
                 {
                     await SendInvalidDateParameterAsync();
                 }
             }
             else
             {
                 await SendInvalidCurrencyCodeAsync(currencyCode);
             }
         }
         catch (Exception ex)
         {
             await SendDeferredErrorResponseAsync(ex);
         }
     });
 }
Exemplo n.º 2
0
        public async Task GetHistoricalCurrencyValues
        (
            [Summary("Código de la moneda a mostrar.")]
            string codigo = null,
            [Summary("(Opcional) Fecha desde. Si no se especifica, se mostrará todo el histórico.")]
            string fechaDesde = null,
            [Summary("(Opcional) Fecha hasta. Si no se especifica, se tomará la fecha del día actual.")]
            string fechaHasta = null
        )
        {
            try
            {
                using (Context.Channel.EnterTypingState())
                {
                    if (string.IsNullOrWhiteSpace(codigo))
                    {
                        await SendMissingParameterForHistoricalCurrencyCommandAsync();
                    }
                    else
                    {
                        string currencyCode = Format.Sanitize(codigo).RemoveFormat(true).ToUpper().Trim();
                        List <WorldCurrencyCodeResponse> historicalCurrencyCodeList = await FiatCurrencyService.GetWorldCurrenciesList();

                        WorldCurrencyCodeResponse worldCurrencyCodeResponse = historicalCurrencyCodeList.FirstOrDefault(x => x.Code.Equals(currencyCode, StringComparison.OrdinalIgnoreCase));
                        if (worldCurrencyCodeResponse != null)
                        {
                            DateTime?startDate = null;
                            DateTime?endDate   = null;
                            if (string.IsNullOrWhiteSpace(fechaDesde) || FiatCurrencyService.ParseDate(fechaDesde, out startDate))
                            {
                                if (string.IsNullOrWhiteSpace(fechaHasta) || FiatCurrencyService.ParseDate(fechaHasta, out endDate))
                                {
                                    DateTime dateFrom = startDate?.Date ?? DateTime.Now;
                                    DateTime dateTo   = endDate?.Date ?? DateTime.Now;
                                    TimeSpan oneYear  = TimeSpan.FromDays(365);
                                    if (dateFrom <= dateTo && (dateTo.Subtract(dateFrom) < oneYear))
                                    {
                                        List <WorldCurrencyResponse> historicalCurrencyValues = await FiatCurrencyService.GetHistoricalCurrencyValues(currencyCode, startDate, endDate);

                                        if (historicalCurrencyValues != null && historicalCurrencyValues.Count > 0)
                                        {
                                            List <EmbedBuilder> embeds = FiatCurrencyService.CreateHistoricalValuesEmbedsAsync(historicalCurrencyValues, worldCurrencyCodeResponse.Name, startDate?.Date, endDate?.Date);
                                            await SendPagedReplyAsync(embeds, true);
                                        }
                                        else
                                        {
                                            await SendNoDataForRangeAsync(startDate, endDate);
                                        }
                                    }
                                    else
                                    {
                                        await SendInvalidDateRangeParametersAsync(startDate, endDate);
                                    }
                                }
                                else
                                {
                                    await SendInvalidDateParameterAsync(fechaHasta);
                                }
                            }
                            else
                            {
                                await SendInvalidDateParameterAsync(fechaDesde);
                            }
                        }
                        else
                        {
                            await SendInvalidCurrencyCodeAsync(currencyCode);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                await SendErrorReply(ex);
            }
        }