예제 #1
0
        public decimal CalculateExchange(ExchangeInput exchangeInput)
        {
            var rateFrom = _rates.Where(x => x.Name.Equals(exchangeInput.From)).Select(x => x.Rate).FirstOrDefault();
            var rateTo   = (decimal)_rates.Where(x => x.Name.Equals(exchangeInput.To)).Select(x => x.Rate).FirstOrDefault();
            var result   = (decimal)(1.0 / rateFrom) * exchangeInput.Value * rateTo;

            return(result);
        }
예제 #2
0
        public IActionResult CalculateExchange([FromBody] ExchangeInput exchange)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            ExchangeMath math   = new ExchangeMath(_repository.GetTodaysRates());
            var          result = math.CalculateExchange(exchange);

            return(Json(math.GetDecimalFormattedString(result, 2)));
        }
예제 #3
0
        public ActionResult Index(ExchangeInput input)
        {
            // Validate Input
            ValidateInput(input);

            // Set Tracked currencies for rendering in View
            ViewData["TrackedCurrencies"] = (IEnumerable <string>) this.HttpContext.Application["TrackedCurrencies"];

            // Render Index view with input
            return(View("Index", input));
        }
예제 #4
0
        /// <summary>
        /// Render Chart
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public ActionResult Chart(ExchangeInput input)
        {
            // Initialize empty data
            IEnumerable <ExchangeRate> data = new ExchangeRate[0];

            // Get data from repository and intialize necessary param for Rendering
            if (input != null)
            {
                // Get data from repository
                data = _exchangeRateRepository.GetExchangeRates(input.TargetCurrency, input.StartDate, input.EndDate);

                // Set param for rendering
                ViewBag.Currency = input.TargetCurrency;
                ViewBag.From     = input.StartDate;
                ViewBag.To       = input.EndDate;
            }

            // Render view
            return(View(data));
        }
예제 #5
0
        /// <summary>
        /// Explicitly validate Exhcange Input
        /// </summary>
        /// <param name="input"></param>
        private void ValidateInput(ExchangeInput input)
        {
            // If no start date selected
            if (input.StartDate == null)
            {
                ModelState.AddModelError("StartDate", "Please select a Start date");
            }

            // If no end date selected
            if (input.EndDate == null)
            {
                ModelState.AddModelError("EndDate", "Please select a End date");
            }

            if (input.StartDate != null && input.EndDate != null)
            {
                // Max expected end date
                var expectedEndDate = input.StartDate.AddMonths(2);

                // Invalid date range
                if (input.EndDate < input.StartDate)
                {
                    ModelState.AddModelError("DateRange", "Invalid Range of Start date and End date. End date should not earlier than Start date");
                }
                else if (input.EndDate > expectedEndDate)
                {
                    ModelState.AddModelError("DateRange", "Invalid Range of Start date and End date. Range should not exceed 2 months");
                }

                // Invalid start date
                if (input.StartDate < new DateTime(1999, 1, 1))
                {
                    ModelState.AddModelError("InvalidStartDate", "StartDate must be later than 1/1/1999");
                }
                else if (input.StartDate > DateTime.Now)
                {
                    ModelState.AddModelError("InvalidStartDate", "No data found");
                }
            }
        }