Exemple #1
0
        public async Task <IActionResult> UpdateTripRoute([FromBody] LatLonDto latLon)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var driverId = Guid.Parse(User.Claims
                                      .FirstOrDefault(c => c.Type == Helpers.Constants.Strings.JwtClaimIdentifiers.DriverId)?.Value);

            var trip = _tripsRepo.GetTripByDriver(driverId);

            if (trip == null)
            {
                return(NotFound());
            }

            if (trip.StartTime == default(DateTime))
            {
                ModelState.AddModelError(nameof(Trip), "Trip not started.");
                return(BadRequest(ModelState));
            }
            var delta = Helpers.Location.CalculateKilometersDistance(trip.LastLat, trip.LastLon, latLon.Latitude, latLon.Longitude);

            if (Math.Abs(delta) > 0.001) //traveled 1+ meters
            {
                var node = _mapper.Map <TripRouteNode>(latLon);

                node.UpdateTime = DateTime.UtcNow;

                node.TripId = trip.Id;

                await _tripsRepo.AddNode(node);

                //    trip.Distance += delta;

                trip.LastLat = latLon.Latitude;

                trip.LastLon = latLon.Longitude;

                trip.LastUpdateTime = node.UpdateTime;

                try
                {
                    // Sending driver's position to the customer
                    await _hubContext.Clients.Client(_usersRepository.GetCustomerById(trip.CustomerId).ConnectionId)
                    .SendAsync("postGeoData", trip.LastLat, trip.LastLon);
                }
                catch
                {
                }

                await _tripsRepo.UpdateTrip(trip);
            }

            var from = trip.From;
            var to   = trip.To;


            var tripToReturn = new UpdateResultTripDto()
            {
                CustomerId      = trip.CustomerId,
                From            = Taxi.Helpers.Location.PointToPlaceDto(from),
                To              = Taxi.Helpers.Location.PointToPlaceDto(to),
                LastUpdatePoint = new PlaceDto()
                {
                    Longitude = trip.LastLon,
                    Latitude  = trip.LastLat
                },
                //TraveledDistance = trip.Distance
            };

            return(Ok(tripToReturn));
        }