Exemple #1
0
        /// <summary>
        /// Function to take in a comma, break line, or new line separated list of locations
        /// and call out to the Google Places API, parse to find the State,
        /// and return a List of the name returned from Google along with the State.
        /// </summary>
        /// <param name="input">Separeted list of locations</param>
        /// <returns></returns>
        public List <AddressDto> FindStates(string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return(null);
            }
            var output   = new List <AddressDto>();
            var taskList = new List <Task <string> >();

            var locations = input.Split(new[] { Environment.NewLine, "<br/>", "<br>", "," }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var location in locations)
            {
                taskList.Add(_googleService.MakeRequestTask(new List <string>()
                {
                    location
                }));
            }
            Task.WaitAll(taskList.ToArray());

            foreach (var task in taskList)
            {
                if (!string.IsNullOrEmpty(task?.Result))
                {
                    var json = JsonConvert.DeserializeObject <GooglePlacesModel>(task.Result);

                    if (json?.candidates?.Any() ?? false)
                    {
                        var candidate = json.candidates.FirstOrDefault();
                        var state     = AddressHelper.FindState(candidate.formatted_address);
                        if (!string.IsNullOrEmpty(state))
                        {
                            output.Add(new AddressDto()
                            {
                                Name = candidate.name, State = state
                            });
                        }
                    }
                }
            }
            return(output.OrderBy(x => x.State).ToList());
        }