예제 #1
0
        public HttpResponseMessage Autocomplete(string q)
        {
            if (q == null)
            {
                return(null);
            }

            //Запрос на FatSecret
            FatSecretAPI fsApi = new FatSecretAPI();
            string       fsAutocompleteResults = fsApi.AutocompleteFood(q);

            if (fsAutocompleteResults.IndexOf("error") != -1)
            {
                // Не выкидываем ошибку, а просто логируем ее во внутреннем журнале возвращая пустой результат

                //TODO Логировать ошибку

                //#region __Error__
                ////Если ошибка, то десериализуем в объект FSError
                //var err = Newtonsoft.Json.JsonConvert.DeserializeObject<FatSecretAPI.FSError>(fsAutocompleteResults);
                ////иначе выбрасываем исключение с кодом и сообщением ошибки
                //throw new FatSecretException(Int16.Parse(err.error.code), err.error.message);
                //#endregion
            }

            object results = JsonConvert.DeserializeObject(fitotrack.Helpers.JSONHelper.FoodsAutocompleteNormalize(fsAutocompleteResults));

            //TODO Возможная выборка из БД

            return(Request.CreateResponse(HttpStatusCode.OK, results));
        }
예제 #2
0
        public HttpResponseMessage GetFsFood(long id)
        {
            //Запрашиваем информацию о продукте у FatSecret
            FatSecretAPI fsApi  = new FatSecretAPI();
            string       fsFood = fsApi.GetFood(id);

            if (fsFood.IndexOf("error") != -1)
            {
                #region __Error__
                //Если ошибка, то десериализуем в объект FSError
                var err = Newtonsoft.Json.JsonConvert.DeserializeObject <FatSecretAPI.FSError>(fsFood);

                //Если ошибка - отсутствует ID
                if (err.error.code.Equals(FatSecretAPI.FSError.INVALID_ID))
                {
                    //то выбрасываем 404
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
                }
                else
                {
                    //иначе выбрасываем исключение с кодом и сообщением ошибки
                    throw new FatSecretException(Int16.Parse(err.error.code), err.error.message);
                }
                #endregion
            }

            var foodDTO = JsonConvert.DeserializeObject <FoodDTO>(fitotrack.Helpers.JSONHelper.FoodGetNormalize(fsFood));

            return(Request.CreateResponse <FoodDTO>(HttpStatusCode.OK, foodDTO));
        }
예제 #3
0
        public HttpResponseMessage Search([FromUri] SearchDTO searchParams)
        {
            SearchResults searchResults = new SearchResults();

            if (searchParams.q != null)
            {
                //if ((q == null) ||
                //    (q.Length < queryMinLength))
                //{
                //  throw new HttpResponseException(
                //    Request.CreateResponse( HttpStatusCode.BadRequest,
                //      "Search query length must be at least " + queryMinLength + " characters." )
                //  );
                //}

                //if (pageSize>50)
                //  pageSize = 50;

                //Ищем на FatSecret
                FatSecretAPI fsApi           = new FatSecretAPI();
                string       fsSearchResults = fsApi.SearchFood(searchParams.q, searchParams.pn, searchParams.ps);

                if (fsSearchResults.IndexOf("error") != -1)
                {
                    #region __Error__
                    //Если ошибка, то десериализуем в объект FSError
                    var err = Newtonsoft.Json.JsonConvert.DeserializeObject <FatSecretAPI.FSError>(fsSearchResults);
                    //иначе выбрасываем исключение с кодом и сообщением ошибки
                    throw new FatSecretException(Int16.Parse(err.error.code), err.error.message);
                    #endregion
                }

                searchResults = JsonConvert.DeserializeObject <SearchResults>(fitotrack.Helpers.JSONHelper.FoodsSearchNormalize(fsSearchResults));

                //TODO Выборка из БД FitoTrack

                #region __old stuff__
                //var query = unitOfWork.FoodRepository.
                //  Get(p => p.Title.Contains(q), null).Where(p=>(p.FSFoodId.Equals(0) || p.FSFoodId == null));
                //var results = query.Skip(page * pageSize).Take(pageSize);
                //if (results != null)
                //{
                //  if (query.Count() > (pageSize * (page + 1)))
                //  {
                //    hasMore = true;
                //  }
                //  resultsDTO = Mapper.Map<IEnumerable<ProductDTO>>(results);
                //}

                //var query = unitOfWork.ProductRepository.
                //  Get(p => p.Title.Contains(q), null);

                //var results = query.Skip(page * pageSize).Take(pageSize);

                //if (results != null)
                //{
                //  if (query.Count() > (pageSize * (page + 1)))
                //  {
                //    hasMore = true;
                //  }
                //  resultsDTO = Mapper.Map<IEnumerable<ProductDTO>>(results);
                //}

                //var obj = new Dictionary<string, object> {
                //  { "results", resultsDTO },
                //  { "hasMore", hasMore }
                //};

                //return Request.CreateResponse<Dictionary<string, object>>(HttpStatusCode.OK, obj);
                #endregion
            }
            return(Request.CreateResponse <SearchResults>(HttpStatusCode.OK, searchResults));
        }