Example #1
0
        private async Task <Guid> CreateTrip(TripRequestModel model)
        {
            var drivers = await GetDrivers();

            var users = await GetUsers();

            var driverInfo = drivers.SingleOrDefault(x => x.Id == int.Parse(model.Driver));
            var userInfo   = users.SingleOrDefault(x => x.Id == int.Parse(model.User));

            var uri     = new Uri(new Uri(_tripApiSettings.Value.BaseUrl), _tripApiSettings.Value.CreateUrl);
            var request = new HttpRequestMessage(HttpMethod.Post, uri)
            {
                Content = new JsonContent(new
                {
                    userId        = int.Parse(model.User),
                    driverId      = int.Parse(model.Driver),
                    from          = _originsAndDestinations.Values.SingleOrDefault(x => x.Description == model.From),
                    to            = _originsAndDestinations.Values.SingleOrDefault(x => x.Description == model.To),
                    plate         = driverInfo?.CurrentVehicle.Plate,
                    brand         = driverInfo?.CurrentVehicle.Brand,
                    model         = driverInfo?.CurrentVehicle.Model,
                    paymentMethod = userInfo?.PaymentMethod
                })
            };

            var response = await _httpClient.SendAsync(request);

            response.EnsureSuccessStatusCode();
            return(JsonConvert.DeserializeObject <Guid>(await response.Content.ReadAsStringAsync()));
        }
        private async Task <Guid> CreateTrip(TripRequestModel model)
        {
            var drivers = await GetDrivers();

            var users = await GetUsers();

            var driverInfo = drivers.SingleOrDefault(x => x.Id == int.Parse(model.Driver));
            var userInfo   = users.SingleOrDefault(x => x.Id == int.Parse(model.User));

            var createRequestRresponse = await _httpInvoker.InvokeAsync(async() =>
            {
                var client  = new RestClient(_tripApiSettings.Value.BaseUrl);
                var request = new RestRequest(_tripApiSettings.Value.CreateUrl, Method.POST);
                request.AddJsonBody(new
                {
                    userId        = int.Parse(model.User),
                    driverId      = int.Parse(model.Driver),
                    from          = _originsAndDestinations.Values.SingleOrDefault(x => x.Description == model.From),
                    to            = _originsAndDestinations.Values.SingleOrDefault(x => x.Description == model.To),
                    plate         = driverInfo?.CurrentVehicle.Plate,
                    brand         = driverInfo?.CurrentVehicle.Brand,
                    model         = driverInfo?.CurrentVehicle.Model,
                    paymentMethod = userInfo?.PaymentMethod
                });

                return(await client.ExecuteTaskAsync(request));
            });

            if (createRequestRresponse.StatusCode != HttpStatusCode.Created)
            {
                throw new InvalidOperationException("There was an error with Trip service", createRequestRresponse.ErrorException);
            }

            return(JsonConvert.DeserializeObject <Guid>(createRequestRresponse.Content));
        }
Example #3
0
        public async Task <IActionResult> SimulateTrip(TripRequestModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.AllErrors()));
            }

            var tripID = await CreateTrip(model);

            await AcceptOrStartTrip(_tripApiSettings.Value.AcceptUrl, tripID, model.ConnectionId);
            await AcceptOrStartTrip(_tripApiSettings.Value.StartUrl, tripID, model.ConnectionId);

            for (var index = 0; index < model.Directions.Count; index += 5)
            {
                var direction = model.Directions[index];
                if (index + 5 >= model.Directions.Count)
                {
                    direction = _originsAndDestinations.Values.SingleOrDefault(x => x.Description == model.To);
                }

                await UpdateTripLocation(tripID, direction, model.ConnectionId);
            }

            return(Ok());
        }
        public async Task <IActionResult> Test()
        {
            var model = new TripRequestModel
            {
                Driver = (await GetDrivers()).FirstOrDefault()?.Id.ToString(),
                User   = (await GetUsers()).FirstOrDefault()?.Id.ToString(),
                From   = "Poblado's Park",
                To     = "Sabaneta Park"
            };

            await CreateTrip(model);

            return(Ok());
        }
        public ActionResult Create(TripRequestModel trip)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.View());
            }

            Trip currentTrip = null;

            if (trip != null && ModelState.IsValid)
            {
                var test      = trip.Route.Substring(1, trip.Route.Length - 2);
                var route     = test.Split(new string[] { "),(" }, StringSplitOptions.RemoveEmptyEntries);
                var locations = new List <Location>();
                var startPos  = route[0].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                currentTrip = new Trip
                {
                    CreatorId    = this.User.Identity.GetUserId(),
                    Description  = trip.Description,
                    StartDate    = trip.StartDate,
                    StartPoint   = trip.StartPoint,
                    ChatRoomName = trip.ChatRoomName
                };

                this.trips.Add(currentTrip);
                currentTrip.Route = locations;

                for (int i = 0; i < route.Length; i++)
                {
                    var current  = route[i].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    var location = new Location
                    {
                        Latitude  = double.Parse(current[0]),
                        Longitude = double.Parse(current[1])
                    };

                    currentTrip.Route.Add(location);
                }

                this.trips.Update(currentTrip);
            }
            ;


            return(this.RedirectToAction("Details", new { id = currentTrip.Id }));
        }
        public ActionResult Create(TripRequestModel trip)
        {
            if(!this.ModelState.IsValid)
            {
                return this.View();
            }
            
            Trip currentTrip = null;

            if (trip != null && ModelState.IsValid)
            {
                var test = trip.Route.Substring(1, trip.Route.Length - 2);
                var route = test.Split(new string[] { "),(" }, StringSplitOptions.RemoveEmptyEntries);
                var locations = new List<Location>();
                var startPos = route[0].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                currentTrip = new Trip
                {
                    CreatorId = this.User.Identity.GetUserId(),
                    Description = trip.Description,
                    StartDate = trip.StartDate,
                    StartPoint = trip.StartPoint,
                    ChatRoomName = trip.ChatRoomName
                };

                this.trips.Add(currentTrip);
                currentTrip.Route = locations;

                for (int i = 0; i < route.Length; i++)
                {
                    var current = route[i].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    var location = new Location
                    {
                        Latitude = double.Parse(current[0]),
                        Longitude = double.Parse(current[1])
                    };

                    currentTrip.Route.Add(location);
                }

                this.trips.Update(currentTrip);
            };


            return this.RedirectToAction("Details", new { id = currentTrip.Id });
        }
        public async Task <IActionResult> Add([FromBody] TripRequestModel tripRequest)
        {
            try
            {
                // Retrieve seat information from vehicle details
                var vehicle = await this._vehicleRepository.GetByVinAsync(tripRequest.VehicleNumber);

                if (vehicle == null)
                {
                    return(NotFound(tripRequest.VehicleNumber));
                }

                // Populate trip information from request model
                var trip = new Trip
                {
                    TripReference = StringHelper.RandomString(8),
                    JourneyDate   = tripRequest.DepartureTime.ToString("MM-dd-yyyy", CultureInfo.InvariantCulture),
                    Tsp           = vehicle.Tsp,
                    Vin           = vehicle.Vin,
                    VehicleName   = $"{vehicle.Details.Make} {vehicle.Details.Model}",
                    Details       = new TripDetails
                    {
                        FromCity      = tripRequest.FromCity,
                        ToCity        = tripRequest.ToCity,
                        DepartureTime = tripRequest.DepartureTime,
                        ArrivalTime   = tripRequest.ArrivalTime
                    },
                    Seats = vehicle.Seats.Select(s => new Seat
                    {
                        SeatNumber = s.SeatNumber,
                        Position   = s.Position,
                        Status     = SeatStatus.Available
                    }).ToArray()
                };

                // Add trip information to document store
                var tripReference = await this._tripRepository.AddAsync(trip);

                return(Ok(tripReference));
            }
            catch (Exception ex)
            {
                _logger.LogError("{0}", ex);
                throw;
            }
        }
        public async Task <IActionResult> Index()
        {
            var drivers = await GetDrivers();

            var users = await GetUsers();

            var model = new TripRequestModel
            {
                Drivers      = drivers.ToSelectList(),
                Users        = users.ToSelectList(),
                User         = users.FirstOrDefault()?.Id.ToString(),
                Driver       = drivers.FirstOrDefault()?.Id.ToString(),
                Origins      = _originsAndDestinations.Keys.Select(x => x).ToList(),
                Destinations = _originsAndDestinations.Keys.Select(x => x).ToList(),
                From         = _originsAndDestinations.Keys.Select(x => x).ToList().FirstOrDefault()?.Text,
                To           = _originsAndDestinations.Keys.Select(x => x).ToList().LastOrDefault()?.Text,
                Places       = _originsAndDestinations.Values.Select(x => x).ToList()
            };

            return(View(model));
        }
        public async Task <IActionResult> SimulateTrip(TripRequestModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.AllErrors()));
            }

            var createdTask             = CreateTrip(model);
            var createdNotificationTask = _hubContext.Clients.All.SendAsync("NotifyTrip", "Created");
            await Task.WhenAll(createdTask, createdNotificationTask);

            var tripID = await createdTask;

            var acceptedTask             = AcceptOrStartTrip(_tripApiSettings.Value.AcceptUrl, tripID);
            var acceptedNotificationTask = _hubContext.Clients.All.SendAsync("NotifyTrip", "Accepted");
            await Task.WhenAll(acceptedTask, acceptedNotificationTask);

            var startedTask             = AcceptOrStartTrip(_tripApiSettings.Value.StartUrl, tripID);
            var startedNotificationTask = _hubContext.Clients.All.SendAsync("NotifyTrip", "Started");
            await Task.WhenAll(startedTask, startedNotificationTask);

            var updatedPositionTasks = new List <Task>();

            for (var index = 0; index < model.Directions.Count; index += 5)
            {
                var direction = model.Directions[index];
                if (index + 5 >= model.Directions.Count)
                {
                    direction = _originsAndDestinations.Values.SingleOrDefault(x => x.Description == model.To);
                }

                updatedPositionTasks.Add(UpdateTripLocation(tripID, direction));
                updatedPositionTasks.Add(_hubContext.Clients.All.SendAsync("UpdateCurrentPosition", direction));
            }

            updatedPositionTasks.Add(_hubContext.Clients.All.SendAsync("NotifyTrip", "Finished"));
            await Task.WhenAll(updatedPositionTasks);

            return(Ok());
        }
Example #10
0
        public async Task <IActionResult> SimulateTrip(TripRequestModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.AllErrors()));
            }

            _generalChaosSetting = await _generalChaosSettingFactory.Value;

            var tripID = await CreateTrip(model);

            await _hubContext.Clients.All.SendAsync("NotifyTrip", "Created");

            await AcceptOrStartTrip(_tripApiSettings.Value.AcceptUrl, tripID);

            await _hubContext.Clients.All.SendAsync("NotifyTrip", "Accepted");

            await AcceptOrStartTrip(_tripApiSettings.Value.StartUrl, tripID);

            await _hubContext.Clients.All.SendAsync("NotifyTrip", "Started");

            for (var index = 0; index < model.Directions.Count; index += 5)
            {
                var direction = model.Directions[index];
                if (index + 5 >= model.Directions.Count)
                {
                    direction = _originsAndDestinations.Values.SingleOrDefault(x => x.Description == model.To);
                }

                await UpdateTripLocation(tripID, direction);

                await _hubContext.Clients.All.SendAsync("UpdateCurrentPosition", direction);
            }

            await _hubContext.Clients.All.SendAsync("NotifyTrip", "Finished");

            return(Ok());
        }