コード例 #1
0
ファイル: RideController.cs プロジェクト: Ota-kun/Kimppakyyti
        public async Task <ActionResult <List <RideOut> > > GetSearchRidesCustomerAsync(DateTime startTime, DateTime endTime, string startAddress, string targetAddress)
        {
            try //Searching Rides from CosmosDB with right TimeTable.
            {
                {
                    //Functions for delayed response -- timeout try /catch

                    // Get route from Google Directions Api
                    var response = await GoogleApiFunctions.GetRouteGoogle(startAddress, targetAddress);

                    // parse response from Google
                    RootObject obj      = JsonConvert.DeserializeObject <RootObject>(response);
                    RideOut    valueOut = new RideOut();


                    if (obj.status == "ZERO_RESULTS")
                    {
                        return(BadRequest("Reittiä ei löytynyt. Tarkista antamasi osoitteet, tai kokeile hakea kaupunginosalla."));
                    }
                    else if (obj.status == "OK")
                    {
                        // parse incoming object to outgoing  start and end point from Google to CosmosDB -object
                        valueOut.Nickname       = "Haku";
                        valueOut.Price          = 0.00;
                        valueOut.StartTime      = startTime;
                        valueOut.EndTime        = endTime;
                        valueOut.StartAddress   = startAddress;
                        valueOut.StartLocation  = new Point(obj.routes[0].legs[0].start_location.lng, obj.routes[0].legs[0].start_location.lat);
                        valueOut.TargetAddress  = targetAddress;
                        valueOut.TargetLocation = new Point(obj.routes[0].legs[0].end_location.lng, obj.routes[0].legs[0].end_location.lat);

                        valueOut.OfferingRide       = false;
                        valueOut.SeatsLeft          = 0;
                        valueOut.MondayFrequency    = false;
                        valueOut.TuesdayFrequency   = false;
                        valueOut.WednesdayFrequency = false;
                        valueOut.ThursdayFrequency  = false;
                        valueOut.FridayFrequency    = false;
                        valueOut.SaturdayFrequency  = false;
                        valueOut.SundayFrequency    = false;

                        // search for matches
                        FeedOptions queryOptions = new FeedOptions {
                            MaxItemCount = -1
                        };

                        IQueryable <RideOut> query = _cosmosDBclient.CreateDocumentQuery <RideOut>(
                            rideCollectionUri, queryOptions).Where(f => f.OfferingRide == true &&
                                                                   f.StartTime >= valueOut.StartTime &&
                                                                   f.StartTime <= valueOut.EndTime &&
                                                                   f.StartLocation.Distance(valueOut.StartLocation) < f.StartLocation.Distance(valueOut.TargetLocation));
                        //&& f.TargetLocation.Distance(valueOut.StartLocation) > f.TargetLocation.Distance(valueOut.TargetLocation));
                        //&& (f.RoutePoints.Where(p => p.Distance(valueOut.StartLocation) < 500).First() != null)); // Distance (to) etäisyys metreinä

                        List <RideOut> incomingRides = query.ToList();
                        List <RideOut> returnRides   = new List <RideOut>();

                        foreach (var item in incomingRides)
                        {
                            bool startPointMatch  = false;
                            bool targetPointMatch = false;
                            try
                            {
                                if (StaticFunctions.CalculateDistanceBetweenPoints(item.RoutePoints.Where(p => StaticFunctions.CalculateDistanceBetweenPoints(p, valueOut.StartLocation) < 501).First(), valueOut.StartLocation) < 501)
                                {
                                    startPointMatch = true;
                                }
                            }
                            catch (Exception)
                            {
                                //startPointMatch = false;
                                //continue;
                            }


                            try
                            {
                                if (StaticFunctions.CalculateDistanceBetweenPoints(item.RoutePoints.Where(p => StaticFunctions.CalculateDistanceBetweenPoints(p, valueOut.TargetLocation) < 501).First(), valueOut.TargetLocation) < 501)
                                {
                                    ;
                                }
                                {
                                    targetPointMatch = true;
                                }
                            }
                            catch (Exception)
                            {
                                //targetPointMatch = false;
                                //continue;
                            }

                            if (startPointMatch && targetPointMatch)
                            {
                                returnRides.Add(item);
                            }
                            startPointMatch  = false;
                            targetPointMatch = false;
                        }

                        // check for contents in query before returning?
                        if (returnRides == null)
                        {
                            valueOut.Nickname = "Hakusi ei tuottanut tuloksia";
                            returnRides.Add(valueOut);
                        }
                        return(returnRides);
                    }

                    else
                    {
                        return(NoContent());// "Nyt kävi jotain.";
                    }
                }
            }

            catch (DocumentClientException de)
            {
                switch (de.StatusCode.Value)
                {
                case System.Net.HttpStatusCode.NotFound:
                    return(NotFound());
                }
            }
            return(BadRequest());
        }
コード例 #2
0
ファイル: RideController.cs プロジェクト: Ota-kun/Kimppakyyti
        public async Task <ActionResult <RideOut> > PostOfferRideAsync([FromBody] Ride valueIn)
        {
            //Functions for delayed response -- timeout try /catch

            // Get route from Google Directions Api
            var response = await GoogleApiFunctions.GetRouteGoogle(valueIn.StartAddress, valueIn.TargetAddress);

            // parse response
            RootObject obj      = JsonConvert.DeserializeObject <RootObject>(response);
            RideOut    valueOut = new RideOut();


            if (obj.status == "ZERO_RESULTS")
            {
                return(NotFound());
            }
            else if (obj.status == "OK")
            {
                // parse incoming object to outgoing  start and end point from Google to CosmosDB -object
                valueOut.Nickname = valueIn.Nickname;
                valueOut.Price    = valueIn.Price;
                valueOut.OnBoard  = new List <string>();
                foreach (var i in valueIn.OnBoard)
                {
                    valueOut.OnBoard.Add(i);
                }

                DateTime UTCDateTime = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Local);
                UTCDateTime        = valueIn.StartTime;
                valueOut.StartTime = UTCDateTime;

                if (valueIn.EndTime != null)
                {
                    valueOut.EndTime = valueIn.EndTime;
                }
                valueOut.StartAddress = valueIn.StartAddress;
                // lat and lng intentionally the wrong way around. don't fix!
                valueOut.StartLocation  = new Point(obj.routes[0].legs[0].start_location.lng, obj.routes[0].legs[0].start_location.lat);
                valueOut.TargetAddress  = valueIn.TargetAddress;
                valueOut.TargetLocation = new Point(obj.routes[0].legs[0].end_location.lng, obj.routes[0].legs[0].end_location.lat);
                valueOut.RoutePoints    = new List <Point>();
                foreach (var location in obj.routes[0].legs[0].steps)
                {
                    valueOut.RoutePoints.Add(new Point(location.end_location.lng, location.end_location.lat));
                }
                valueOut.OfferingRide       = valueIn.OfferingRide;
                valueOut.SeatsLeft          = valueIn.SeatsLeft;
                valueOut.MondayFrequency    = valueIn.MondayFrequency;
                valueOut.TuesdayFrequency   = valueIn.TuesdayFrequency;
                valueOut.WednesdayFrequency = valueIn.WednesdayFrequency;
                valueOut.ThursdayFrequency  = valueIn.ThursdayFrequency;
                valueOut.FridayFrequency    = valueIn.FridayFrequency;
                valueOut.SaturdayFrequency  = valueIn.SaturdayFrequency;
                valueOut.SundayFrequency    = valueIn.SundayFrequency;

                // How to check if document == created?
                Document document = await _cosmosDBclient.CreateDocumentAsync(
                    UriFactory.CreateDocumentCollectionUri(_dbName, _collectionName),
                    valueOut);

                return(Ok(document.Id));
            }
            else
            {
                return(BadRequest());
            }
        }
コード例 #3
0
        public async Task <ActionResult <List <RideOut> > > GetSearchRidesLocationAsync(DateTime startTime, DateTime endTime, string startAddress)
        {
            try //Searching Rides from CosmosDB with right TimeTable.
            {
                {
                    //Functions for delayed response -- timeout try /catch

                    // Get route from Google Directions Api
                    var response = await GoogleApiFunctions.GetPlaceGoogle(startAddress);

                    // parse response from Google
                    RootObject obj      = JsonConvert.DeserializeObject <RootObject>(response);
                    RideOut    valueOut = new RideOut();



                    if (obj.status == "ZERO_RESULTS")
                    {
                        return(BadRequest("Reittiä ei löytynyt.Tarkista antamasi osoitteet, tai kokeile hakea kaupunginosalla."));
                    }
                    else if (obj.status == "OK")
                    {
                        // parse incoming object to outgoing  start and end point from Google to CosmosDB -object
                        valueOut.Nickname     = "Haku";
                        valueOut.Price        = 0.00;
                        valueOut.StartTime    = startTime;
                        valueOut.EndTime      = endTime;
                        valueOut.StartAddress = startAddress.ToLower();
                        valueOut.Location     = new Point(obj.candidates[0].geometry.location.lng, obj.candidates[0].geometry.location.lat);

                        valueOut.OfferingRide       = false;
                        valueOut.SeatsLeft          = 0;
                        valueOut.MondayFrequency    = false;
                        valueOut.TuesdayFrequency   = false;
                        valueOut.WednesdayFrequency = false;
                        valueOut.ThursdayFrequency  = false;
                        valueOut.FridayFrequency    = false;
                        valueOut.SaturdayFrequency  = false;
                        valueOut.SundayFrequency    = false;

                        // search for matches
                        FeedOptions queryOptions = new FeedOptions {
                            MaxItemCount = -1
                        };

                        IQueryable <RideOut> query = _cosmosDBclient.CreateDocumentQuery <RideOut>(
                            rideCollectionUri, queryOptions).Where(f => f.OfferingRide == true &&
                                                                   f.StartTime >= valueOut.StartTime &&
                                                                   f.StartTime <= valueOut.EndTime &&
                                                                   f.StartAddress.ToLower() == valueOut.StartAddress);


                        List <RideOut> incomingRides = query.ToList();
                        List <RideOut> returnRides   = new List <RideOut>();

                        foreach (var item in incomingRides)
                        {
                            returnRides.Add(item);
                        }

                        // check for contents in query before returning?
                        if (returnRides == null)
                        {
                            valueOut.Nickname = "Hakusi ei tuottanut tuloksia";
                            returnRides.Add(valueOut);
                        }
                        return(returnRides);
                    }

                    else
                    {
                        return(NoContent());// "Nyt kävi jotain.";
                    }
                }
            }

            catch (DocumentClientException de)
            {
                switch (de.StatusCode.Value)
                {
                case System.Net.HttpStatusCode.NotFound:
                    return(NotFound());
                }
            }
            return(BadRequest());
        }