public static ReadRideDTO InsertRide(CreateRideDTO dto) { try { if (!Validate(dto)) { return(null); } Ride newRide = CreateRideDTO.FromDTO(dto); newRide.Id = Guid.NewGuid().ToString(); RideRelationship rel = new RideRelationship(newRide, dto.CarrierId); var query = DataLayer.Client.Cypher .Create("(ride : Ride {newRide})") .WithParam("newRide", newRide) .With("ride") .Match("(takeOf: Station)", "(arrival: Station)", "(carrier: Carrier)") .Where((Station takeOf) => takeOf.Id == dto.TakeOfStationId) .AndWhere((Station arrival) => arrival.Id == dto.ArrivalStationId) .AndWhere((Carrier carrier) => carrier.Id == dto.CarrierId) .Create("(ride) <- [: TAKES_OF] - (takeOf)") .Create("(ride) - [: ARRIVES] -> (arrival)") .Create("(ride) - [: CARRIER] -> (carrier)") .Create("(takeOf) - [r: RIDE {rideRel}] -> (arrival)") .WithParam("rideRel", rel) .Return((ride, arrival, takeOf, carrier) => new BusinessRide() { Ride = ride.As <Ride>(), Carrier = carrier.As <Carrier>(), ArrivalStation = arrival.As <Station>(), TakeOfStation = takeOf.As <Station>() }).Results; if (query != null && query.Count() > 0) { var ride = query.ToList(); var carrierName = ride[0].Carrier.Name; var q = DataLayer.Client.Cypher .Match("(takeOf:Station) - [r: RIDE] -> (arrival:Station)") .Where((RideRelationship r) => r.Id == newRide.Id) .Set("r.CarrierName = {carrierName}") .WithParam("carrierName", carrierName) .Return <RideRelationship>("r") .Results; if (q != null) { RedisRideDataProvider.InsertRide(newRide.Id, newRide.NumberOfSeats); return(new ReadRideDTO(ride[0])); } } return(null); } catch (Exception e) { return(null); } }
private static bool Validate(CreateRideDTO dto) { if (dto.ArrivalStationId == dto.TakeOfStationId) { return(false); } //if (StationDataProvider.Get(dto.ArrivalStationId) == null) // return false; //if (StationDataProvider.Get(dto.TakeOfStationId) == null) // return false; //if (CarrierDataProvider.GetCarrier(dto.CarrierId) == null) // return false; if (dto.RidePrice <= 0 || dto.NumberOfSeats <= 0) { return(false); } return(true); }
// POST: api/Ride public ReadRideDTO Post([FromBody] CreateRideDTO value) { return(RideDataProvider.InsertRide(value)); }
public RideReturnDTO Post([FromBody] CreateRideDTO rideInfo) { if (!UserPrincipal.IsCustomer && !UserPrincipal.IsDispatcher) { throw new HttpResponseException(HttpStatusCode.Unauthorized); } Ride ride = new Ride() { CarType = rideInfo.CarType, StartLocation = rideInfo.Location, Destination = new Location(), Date = DateTime.Now, Amount = 0 }; if (rideInfo.Location.X == 0 && rideInfo.Location.Y == 0) { return(new RideReturnDTO() { IsSuccess = false, Message = $"Please select location from map" }); } if (UserPrincipal.IsDispatcher) { Driver driver = uow.UserRepository.GetByID(rideInfo.DriverId) as Driver; if (driver == null) { return(new RideReturnDTO() { IsSuccess = false, Message = $"No driver with {rideInfo.DriverId}" }); } if (!driver.IsFree()) { return(new RideReturnDTO() { IsSuccess = false, Message = $"Driver is not free to accept new ride" }); } ride.DriverId = driver.Id; ride.Driver = driver; ride.DispatcherId = UserPrincipal.CurrentUser.Id; ride.Status = RideStatus.Formed; } else if (UserPrincipal.IsCustomer) { if (!(uow.UserRepository.GetByID(UserPrincipal.CurrentUser.Id) as Customer).IsFree()) { return(new RideReturnDTO() { IsSuccess = false, Message = $"Cannot start new ride before current is finished or canceled" }); } ride.Status = RideStatus.Created; ride.CustomerId = UserPrincipal.CurrentUser.Id; ride.Customer = uow.UserRepository.GetByID(UserPrincipal.CurrentUser.Id) as Customer; } ride = uow.RideRepository.Insert(ride); return(new RideReturnDTO() { IsSuccess = true, Ride = ride }); }