// POST: api/BenefitsApi /// <summary> /// Post performs the calculation. /// </summary> /// <param name="model">a Family instance</param> /// <returns>CalculateResultsModel</returns> /// an IEnumerable collection public HttpResponseMessage Post([FromBody] Family model) { try { var validationResults = _familyValidator.Run(model); if (validationResults.IsValid) { CalculationResults results = _calculator.RunCalculations(model, _appConfig); CalculatedResultsModel resultsModel = _modelMapper.MapToResults(results); return(Request.CreateResponse(HttpStatusCode.OK, resultsModel)); } HttpError err = new HttpError("Invalid input parameter. " + validationResults.Message); return(Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, err)); } catch (Exception e) { Debug.WriteLine(e.Message); //TODO: log the exception HttpError err = new HttpError("Exception occurred check server logs"); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, err)); } }
public CalculatedResultsModel MapToResults(CalculationResults calculation) { CalculatedResultsModel model = new CalculatedResultsModel(); //Brute force approach //in real application we can integrate a mapping technology such //as automapper model.EmployeeName = getEmployeeName(calculation.Family); model.AdjustedPeriodPayAmount = calculation.AdjustedPeriodAmount; model.AnnualCosts = calculation.AnnualCosts; model.AnnualSalary = calculation.AnnualSalary; model.EmployerDiscounts = calculation.EmployerDiscounts; model.Family = calculation.Family; model.PerPeriodCosts = (calculation.AnnualCosts - calculation.EmployerDiscounts) / 26; return(model); }
public void SetUp() { _family = new Family { Members = new List <Person> { new Person { IsEmployee = true, FirstName = "Aaron", LastName = "Smith" } }, }; _calculator = new Calculator(); _appConfig = new AppConfiguration(); _calculation = _calculator.RunCalculations(_family, _appConfig); _mapper = new ModelMapper(); _results = _mapper.MapToResults(_calculation); }