Пример #1
0
 public ActionResult RangeRoot(ExchangeRangeViewModel exchangeRange)
 {
     Trace.WriteLine("RangeRoot for exchangeRange.");
     if (ModelState.IsValid)
     {
         Trace.WriteLine("Model is valid. Be ready to request the range.");
         return(RedirectToAction("Range", exchangeRange.ToRouteValues()));
     }
     Trace.WriteLine("Model is not valid.");
     return(View(exchangeRange));
 }
Пример #2
0
        public ActionResult RangeRoot()
        {
            Trace.WriteLine("RANGE W/O arguments.");
            var endDate      = DateTime.Now;
            var startDate    = DateTime.Now.Subtract(TimeSpan.FromDays(14));
            var currencyCode = "RUB";
            var model        = new ExchangeRangeViewModel {
                StartDate = startDate, EndDate = endDate, TargetCurrencyCode = currencyCode
            };

            return(View(model));
        }
Пример #3
0
        /*
         * Returns rates for a given currencyCode from startDate to endDate inclusive.
         * GET: Exchanges/Range/2014-02-25/2014-02-27/RUB
         **/
        public ActionResult Range(ExchangeRangeViewModel exchangeRange)
        {
            Trace.WriteLine("RANGE for " + exchangeRange + ".");
            var startDate          = exchangeRange.StartDate;
            var endDate            = exchangeRange.EndDate;
            var targetCurrencyCode = exchangeRange.TargetCurrencyCode;

            var maxNumberOfDaysInRange = 62;

            Trace.WriteLine(
                String.Format(
                    "Range requested for: {0}-{1} {2}",
                    startDate, endDate, targetCurrencyCode
                    )
                );
            var numberOfDaysInRange = (endDate - startDate).Days + 1; // Inclusive.

            if (!(0 < numberOfDaysInRange && numberOfDaysInRange <= maxNumberOfDaysInRange))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.RequestedRangeNotSatisfiable,
                                                String.Format("Number of days in a range must be positive and less than {0}.", maxNumberOfDaysInRange)));
            }
            IEnumerable <Exchange> exchanges;

            try
            {
                exchanges = exchangeContext.ExchangeRepository.GetRange(startDate, endDate, targetCurrencyCode);
                Trace.WriteLine("Retrieved range of responses without errors.");
            }
            catch (ExchangeResource.BaseException resEx)
            {
                Trace.WriteLine("ExchangeResource exception caught with " + resEx.GetFailedDates().Count() + " failed dates. Specifying type...");
                var failedDatesString = String.Join(", ", resEx.GetFailedDates().Select(d => d.ToString("yyyy-MM-dd")));
                var header            = String.Format(
                    "Couldn't supply information about {0} on these dates: {1}. Reason:<br/>",
                    targetCurrencyCode,
                    failedDatesString
                    );
                header = header.Replace("\r", "").Replace("\n", "<br/>"); // Linebreaks are not allowed in http headers.
                try {
                    throw;
                }
                catch (ExchangeResource.TryLaterException)
                {
                    return(new HttpStatusCodeResult(
                               HttpStatusCode.ServiceUnavailable,
                               header + "Temporary fail. The application has temporary difficulties with specified currency and dates. Try a bit later."
                               ));
                }
                catch (ExchangeResource.TryRequestingOtherDatesOrCurrency requestEx)
                {
                    return(new HttpStatusCodeResult(
                               HttpStatusCode.NotFound,
                               header + "The application has no information about this currency on dates requested."
                               + "<br/>" + requestEx.Message
                               ));
                }
                catch (ExchangeResource.BaseException)
                {
                    Trace.WriteLine("Some base resource exception caught. Header for response: <" + header + ">");
                    return(new HttpStatusCodeResult(
                               HttpStatusCode.ServiceUnavailable,
                               header + "The application can't complete your request for specified currency and dates due to some internal conflicts."
                               ));
                }
            }
            Trace.WriteLine("Now we have all exchanges and ready to render a view.");
            return(View(exchanges));
        }