public ActionResult <DistanceResponse> Get(DistanceCalculationMethod distanceMethod, MeasureUnit measureUnit, [FromQuery][Range(-90, 90, ErrorMessage = "Must be in [-90, 90] interval")] double point1Latitude, [FromQuery][Range(-180, 180, ErrorMessage = "Must be in [-180, 180] interval")] double point1Longitude, [FromQuery][Range(-90, 90, ErrorMessage = "Must be in [-90, 90] interval")] double point2Latitude, [FromQuery][Range(-180, 180, ErrorMessage = "Must be in [-180, 180] interval")] double point2Longitude) { var point1 = new DistancePoint { Latitude = point1Latitude, Longitude = point1Longitude }; var point2 = new DistancePoint { Latitude = point2Latitude, Longitude = point2Longitude }; return(new ActionResult <DistanceResponse>(new DistanceResponse { Distance = _distanceStrategy.CalculateDistance(point1, point2, measureUnit, distanceMethod) })); }
public double CalculateDistance(IDistancePoint point1, IDistancePoint point2, MeasureUnit measureUnit, DistanceCalculationMethod distanceMethod) { //Saves calculation when points are equivalent if (point1.Equals(point2)) { return(0); } else { return(_distanceMethods.FirstOrDefault(x => x.DistanceCalculationMethod == distanceMethod)?.CalculateDistance(point1, point2, measureUnit) ?? throw new ArgumentNullException(nameof(distanceMethod))); } }