public async Task <IHttpActionResult> CreateTrip(TripReadModel model) { var waypoints = model.WayPoints.Select(w => w.Place).ToList(); waypoints.Insert(0, model.StartPoint); waypoints.Add(model.EndPoint); DistanseMatrixResponseModel distanseMatrixModel = await _distanceMatrixQuery.GetDistanceMatrix(waypoints); if (!distanseMatrixModel.Validate()) { throw new ApplicationException("Invalid response from distanse matrix API"); } double[,] matrix = distanseMatrixModel.ToArray(); var route = _routeService.CalculateRoute(matrix, 0, waypoints.Count - 1, model.Algorithm); var trip = model.ToEntity(); _context.Trips.Add(trip); await _context.SaveChangesAsync(); return(Ok(route)); }
public static Trip ToEntity(this TripReadModel model) { var intermidiatePoints = model.WayPoints.Select(_ => _.Place.ToIntermediatePoint()).ToList(); intermidiatePoints.Add(model.StartPoint.ToIntermediatePoint(true)); intermidiatePoints.Add(model.EndPoint.ToIntermediatePoint(false, true)); return(new Trip() { DepartureDate = model.DepartureDate, Price = model.Price, IntermediatePoints = intermidiatePoints }); }