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)); }
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()); }
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()); }