public async Task <IResult> CalculateAsync(ICalculatorRequest request) { var mortgageRequest = (MortgageCalculationRequest)request; if (mortgageRequest != null) { var mortgageResult = new MortgageResult(); var mortgageModel = CalculateMortgageModel(mortgageRequest.Mortgage, mortgageRequest.Purchase); mortgageResult.Mortgage = mortgageModel.Interest + mortgageModel.Principle + mortgageModel.PMI; var yearlyPropertyTax = mortgageRequest.Purchase.PurchasePrice * 0.0223; mortgageResult.PropertyTaxes = yearlyPropertyTax / 12; mortgageResult.HomeInsurance = mortgageRequest.Extras.HomeInsuranceAnnual / 12; mortgageResult.UtilitiesCost = mortgageRequest.Extras.Utilities.Sum(x => x.Cost); mortgageResult.AssociationDues = mortgageRequest.Extras.HOADues; return(new Result <MortgageResult> { data = mortgageResult }); } return(new Result <MortgageResult>()); }
private void ValidateRequest(ICalculatorRequest request) { if (request == null) { throw new ArgumentException("Request must be initialized"); } }
public ICalculator GetCalculator(ICalculatorRequest request) { if (request.GetType() == typeof(MortgageCalculationRequest)) { return(new MortgagePropertyCalculator()); } else { throw new NotImplementedException("This request type doesnt support calculations at the moment"); } }