// GET api/SearchBeer
        public async Task<List<BeerItem>> Get(string keyword)
        {
            Services.Log.Info(string.Format("Search beer call with keyword {0}",keyword));
            var rv = new List<BeerItem>();

            if (!BreweryDBHelper.InsureBreweryDBIsInitialized(Services))
                return rv;

            try
            {
                var results = await new BreweryDB.BreweryDBClient().SearchForBeer(keyword);
                if (results != null && results.Any())
                {
                    Services.Log.Info(string.Format("Found {0} beers", results.Count()));

                    var context = new BeerDrinkinContext();
                    bool needSave = false;
                    foreach (var r in results)
                    {
                        Services.Log.Info(string.Format("proceeding {0} beer", r.Name));
                        //check if we already have beer in db
                        var beer = context.BeerItems.FirstOrDefault(f => f.BreweryDBId == r.Id);
                        if (beer == null)
                        {
                            Services.Log.Info(string.Format("Beer {0} wasn't logged yet", r.Name));
                            needSave = true;
                            try
                            {
                                beer = r.ToBeerItem();

                                if (r.Style != null)
                                {
                                    var style = context.BeerStyles.FirstOrDefault(f => f.Name == r.Style.Name);
                                    if (style == null)
                                    {
                                        style = r.Style.ToBeerStyle();
                                        context.BeerStyles.Add(style);
                                    }
                                    beer.StyleId = style.Id;
                                }
                                context.BeerItems.Add(beer);
                            }
                            catch (Exception ex)
                            {
                                Services.Log.Error(string.Format("Exception creating beer: {0}", ex.Message));
                            }
                        }
                        rv.Add(beer);
                    }
                    if (needSave)
                        await context.SaveChangesAsync();
                }
            }
            catch (Exception ex)
            {
                Services.Log.Error(ex.Message);
            }

            return rv;
        }
        public async override Task ExecuteAsync()
        {
            //We'll be going off to BreweryDB, fetching all the beers they have and checking if we've already for that in our DB. If not, we'll go ahead and save it. 

            var context = new BeerDrinkinContext();

            var processedPageCount = 1;
            var totalPageCount = 99; //We replace this pretty quickly! 

            while (totalPageCount != processedPageCount)
            {
                var pageResult = await AllBeers(processedPageCount);
                totalPageCount = pageResult.NumberOfPages;

                foreach (var beer in pageResult.Data)
                {
                    var beerItem = beer.ToBeerItem();
                    context.Beers.Add(beerItem);
                    Services.Log.Info($"Saved {beerItem.Name} into our database");
                }
                Services.Log.Info($"Finished processing page {processedPageCount} of {totalPageCount}");
                processedPageCount++;

                await context.SaveChangesAsync();
            }

            Services.Log.Info("Hello from scheduled job!");
        }
        public async override Task ExecuteAsync()
        {
            Services.Log.Info("Hello from scheduled job!");

            if (!BreweryDBHelper.InsureBreweryDBIsInitialized(Services))
            {
                Services.Log.Error("Could not init BreweryDB API");
                return;
            }

            Services.Log.Info("BreweryDB is initialized");

            var context = new BeerDrinkinContext();

            foreach (var beerItem in context.BeerItems)
            {
                Services.Log.Info("updating beer " + beerItem.Name);
                var beer = await new BreweryDB.BreweryDBClient().QueryBeerById(beerItem.Id);
                if (beer == null)
                {
                    Services.Log.Error(string.Format("Could not get beer {0} with id {1}", beerItem.Name, beerItem.BreweryDBId) );
                    continue;
                }
                //this call updates beerItem form BreweryDB beer object
                var newBeerItem = beer.ToBeerItem(beerItem);
            }
            await context.SaveChangesAsync();
            
            Services.Log.Info("UpdateBeerJob is completed!");
        }
        // POST api/BinaryItem
        public async Task<HttpResponseMessage> Post(BinaryUploadRequest binaryUploadRequest)
        {
            var binaryItem = new BinaryItem
            {
                Id = Guid.NewGuid().ToString("N"),
                ObjectId = binaryUploadRequest.BinaryId,
                BinaryType = binaryUploadRequest.BinaryType,
                UserId = binaryUploadRequest.UserId
            };

            binaryItem.BinaryUrl =
                await BlobUtils.SaveBinaryToAzureStorage(Services, binaryItem.Id, binaryUploadRequest.BinaryData);

            if (!string.IsNullOrEmpty(binaryItem.BinaryUrl))
            {
                BeerDrinkinContext context = new BeerDrinkinContext();
                context.BinaryItems.Add(binaryItem);
                await context.SaveChangesAsync();
                return this.Request.CreateResponse(HttpStatusCode.OK);
            }

            return this.Request.CreateResponse(HttpStatusCode.Conflict,
                "Something wrong");
        }