コード例 #1
0
        /// <summary>
        /// The driver confirms that a passenger has boarded the vehicle.
        /// </summary>
        /// <param name="rideStatus">The id of the passenger's destination and the driver id.</param>
        /// <returns></returns>
        public async Task <bool> Board(RideStatusViewModel rideStatus)
        {
            try
            {
                var stateCompleted = _context.States.Where(stateSr => stateSr.Name == "Completed").FirstOrDefault();
                var stateInTransit = _context.States.Where(stateSr => stateSr.Name == "In Transit").FirstOrDefault();

                var ride = await _context.Destinations.FindAsync(rideStatus.RideId);

                if (ride == null)
                {
                    return(false);
                }

                ride.StateId = stateInTransit.Id;
                _context.Entry(ride).State = EntityState.Modified;

                try
                {
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    throw;
                }

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
コード例 #2
0
        public async Task <IActionResult> PostAcceptRide([FromBody] RideStatusViewModel rideAccept)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var ride = await _rideService.Accept(rideAccept);

            if (ride)
            {
                return(Ok(new
                {
                    status = "success"
                }));
            }
            else
            {
                return(BadRequest());
            }
        }
コード例 #3
0
        /// <summary>
        /// The driver accepts the ride for a passenger.
        /// We change the ride's state and decrement the current capacity for
        /// the driver's destination.
        /// </summary>
        /// <param name="rideId">The ride from the user.</param>
        /// <param name="driverId">The driver accepting the ride.</param>
        /// <returns></returns>
        public async Task <bool> Accept(RideStatusViewModel acceptRide)
        {
            try
            {
                var statePickup         = _context.States.Where(stateSr => stateSr.Name == "To Pickup").FirstOrDefault();
                var stateAwaitingPickup = _context.States.Where(stateSr => stateSr.Name == "Awaiting Pickup").FirstOrDefault();

                var ride = await _context.Destinations.FindAsync(acceptRide.RideId);

                if (ride == null)
                {
                    return(false);
                }

                ride.StateId = stateAwaitingPickup.Id;
                _context.Entry(ride).State = EntityState.Modified;

                try
                {
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    throw;
                }

                var destination = await _context.Destinations
                                  .Where(dest => dest.UserId == acceptRide.UserId &&
                                         (dest.State.Name == "Awaiting Departure" || dest.State.Name == "In Transit" ||
                                          dest.State.Name == "To Pickup") && dest.AvailableCapacity > 0)
                                  .FirstOrDefaultAsync();

                if (destination == null)
                {
                    return(false);
                }

                destination.AvailableCapacity -= 1;

                if (destination.State.Name != "To Pickup")
                {
                    destination.State = statePickup;
                }

                _context.Entry(destination).State = EntityState.Modified;

                try
                {
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    throw;
                }
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }