public static CustomClasses.WebServiceResponse Execute(string url)
        {
            CustomClasses.WebServiceResponse retVal = new CustomClasses.WebServiceResponse();
            retVal.Status = (int)StatusEnum.OK;
            string         resStr       = string.Empty;
            HttpWebRequest request      = (HttpWebRequest)WebRequest.Create(url);
            bool           arrayStarted = false;

            try
            {
                List <CustomClasses.Hotel> hotels = null;
                int        count  = 0;
                HttpClient client = new HttpClient();
                using (Stream stream = client.GetStreamAsync(url).Result)
                    using (StreamReader sr = new StreamReader(stream))
                        using (JsonReader reader = new JsonTextReader(sr))
                        {
                            CustomClasses.Hotel hotel      = null;
                            JsonSerializer      serializer = new JsonSerializer
                            {
                                DateFormatString = "dd-MM-yyyy"
                            };

                            while (reader.Read())
                            {
                                if (arrayStarted && reader.TokenType == JsonToken.StartObject)
                                {
                                    hotel    = serializer.Deserialize <CustomClasses.Hotel>(reader);
                                    hotel.id = count;
                                    hotels.Add(hotel);
                                    DateIndexBuilder.AddIndex(hotel);
                                }
                                else if (reader.TokenType == JsonToken.StartArray)
                                {
                                    arrayStarted = true;
                                    hotels       = new List <CustomClasses.Hotel>();
                                }
                                count++;
                            }
                        }

                retVal.Data = hotels;
            }
            catch (WebException ex)
            {
                retVal.Status       = (int)StatusEnum.ERROR;
                retVal.ErrorMessage = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
            }

            return(retVal);
        }
Exemple #2
0
        public IEnumerable <CustomClasses.Hotel> GetHotels(string name = "", string dest = "", string priceRange = "", string dateRange = "")
        {
            IEnumerable <CustomClasses.Hotel> retVal = null;

            CustomClasses.WebServiceResponse response = APIHelper.Execute(Configurations.API_URL);
            if (response.Status == (int)StatusEnum.OK)
            {
                retVal = response.Data;

                if (!string.IsNullOrEmpty(name))
                {
                    retVal = retVal.Where(a => a.name.ToUpper() == name.ToUpper());
                }
                if (!string.IsNullOrEmpty(dest))
                {
                    retVal = retVal.Where(a => a.city.ToUpper() == dest.ToUpper());
                }
                if (!string.IsNullOrEmpty(priceRange))
                {
                    retVal = retVal.Where(a => a.price >= double.Parse(priceRange.Split(':')[0]) && a.price <= double.Parse(priceRange.Split(':')[1]));
                }

                if (!string.IsNullOrEmpty(dateRange))
                {
                    if (DateIndexBuilder.dateIndex != null && DateIndexBuilder.dateIndex.Count > 0)
                    {
                        List <int> hotelIds = DateIndexBuilder.dateIndex.Where(a => a.Key >= DateTime.ParseExact(dateRange.Split(':')[0], "dd-MM-yyyy", CultureInfo.InvariantCulture) && a.Key <= DateTime.ParseExact(dateRange.Split(':')[1], "dd-MM-yyyy", CultureInfo.InvariantCulture)).Select(a => a.Value).SelectMany(x => x).Distinct().ToList();
                        retVal = retVal.Where(a => hotelIds.Contains(a.id));
                    }
                }

                if (retVal.ToList().Count == 0)
                {
                    throw new Exception("no records found");
                }
            }

            return(retVal);
        }