private void GetAction(HttpListenerContext context, string[] route)
        {
            try
            {
                var queryString = context.Request.QueryString;

                var getBeers = false;
                var id       = 0;

                try
                {
                    if (!string.Equals("help", route[0]))
                    {
                        if (!bool.TryParse(queryString["GetBeers"], out getBeers))
                        {
                            SendBadRequest(context);
                            return;
                        }

                        if (!string.Equals("all", route[0]) && !int.TryParse(route[1], out id))
                        {
                            SendBadRequest(context);
                            return;
                        }
                    }
                }
                catch (Exception)
                {
                    SendBadRequest(context);
                    return;
                }

                switch (route[0])
                {
                case "id":
                    SendResponse(context, breweryRepo.FindById(id, getBeers));
                    break;

                case "untappdId":

                    var dbResults = breweryRepo.FindByUntappdId(id, getBeers);

                    //client
                    if (!dbResults.Success || dbResults.Data == null)
                    {
                        var requestWrapper = new RequestWrapper
                        {
                            HttpMethod   = HttpMethod.Get,
                            RelativePath = $"brewery/info/{id}"
                        };

                        requestWrapper.QueryParameters = new List <KeyValuePair <string, string> >
                        {
                            new KeyValuePair <string, string>(
                                "compact",
                                (!getBeers)
                                .ToString().ToLower())
                        };


                        var clientResults = client.Get(requestWrapper);

                        if (clientResults.Success && clientResults.Data.IsSuccess)
                        {
                            var uResponse =
                                JsonConvert.DeserializeObject <UntappdResponse>(
                                    clientResults.Data.Content.ToString())
                                as UntappdResponse;

                            if (uResponse.Meta.Code == (int)HttpStatusCode.OK)
                            {
                                var breweryResponse =
                                    JsonConvert.DeserializeObject <Models.Untappd.Brewery>(
                                        uResponse.Response.brewery
                                        .ToString()) as
                                    Models.Untappd.Brewery;

                                var breweryBeers = new List <Beer>();

                                foreach (var item in uResponse.Response.brewery.beer_list.items)
                                {
                                    var uBeer =
                                        JsonConvert.DeserializeObject <Models.Untappd.Beer>(
                                            item.beer.ToString()) as
                                        Models.Untappd.Beer;

                                    breweryBeers.Add(UntappdToAppAdapter.Get(uBeer));
                                }

                                var breweryObj = UntappdToAppAdapter.Get(breweryResponse);

                                breweryObj.Beers = breweryBeers;

                                SendResponse(context, breweryRepo.AddOrUpdate(breweryObj));
                            }
                        }
                    }


                    SendResponse(context, dbResults);
                    break;

                case "breweryDbId":
                    SendResponse(context, breweryRepo.FindBreweryDbId(id, getBeers));
                    break;

                case "all":
                    SendResponse(context, breweryRepo.FindAllBreweries(getBeers));
                    break;

                case "help":
                    SendOKResponseAndPayload(context,
                                             JsonConvert.SerializeObject(EndpointDocumentation));
                    break;

                default:
                    ErrorResponse
                    .Get(HttpStatusCode.BadRequest)
                    .Handle(context, $"Bad Request - No '/beer/{route[0]}/...' exists");
                    break;
                }
            }
            catch (Exception e)
            {
                if (e is ArgumentNullException || e is ArgumentException || e is FormatException ||
                    e is OverflowException)
                {
                    ErrorResponse.Get(HttpStatusCode.BadRequest).Handle(context, "Badly formed Id");
                }
                else
                {
                    ErrorResponse.Get(HttpStatusCode.InternalServerError)
                    .Handle(context, e.Message);
                }
            }
        }
示例#2
0
        // Finds by App.BeerId, UntappdId, App.BreweryId
        private void GetAction(HttpListenerContext httpListenerContext, string[] route)
        {
            try
            {
                var queryString = httpListenerContext.Request.QueryString;

                switch (route[0])
                {
                case "untappdId":
                    var uId = int.Parse(route[1]);
                    SendResponse(httpListenerContext, beerRepo.FindUntappdId(uId));
                    break;

                case "beerId":
                    var id = int.Parse(route[1]);
                    SendResponse(httpListenerContext, beerRepo.FindById(id));
                    break;

                case "breweryId":
                    var bId = int.Parse(route[1]);
                    SendResponse(httpListenerContext, beerRepo.FindByBreweryId(bId));
                    break;

                case "search":
                    var name      = queryString["name"];
                    var dbResults = beerRepo.FindByName(name);

                    //no records matching exist in DB
                    if (!dbResults.Success || dbResults.Data.Count == 0)
                    {
                        //try find in Untappd
                        var requestWrapper =
                            new RequestWrapper
                        {
                            HttpMethod      = HttpMethod.Get,
                            RelativePath    = "search/beer",
                            QueryParameters =
                                new List <KeyValuePair <string, string> >
                            {
                                new KeyValuePair <string, string>("q",
                                                                  name),
                                new KeyValuePair <string, string>(
                                    "sort",
                                    "name")
                            }
                        };

                        var clientResults = client.Get(requestWrapper);

                        if (clientResults.Success && clientResults.Data.IsSuccess)
                        {
                            var uResponse =
                                JsonConvert.DeserializeObject <UntappdResponse>(
                                    clientResults.Data.Content.ToString())
                                as UntappdResponse;


                            if (uResponse.Meta.Code == (int)HttpStatusCode.OK)
                            {
                                var contentResponse =
                                    JsonConvert.DeserializeObject <BeerSearchResponse>(
                                        uResponse.Response.ToString())
                                    as
                                    BeerSearchResponse;

                                if (contentResponse.Found > 0)
                                {
                                    var insertedResults =
                                        new TransactionResult <
                                            ICollection <TransactionResult <Brewery> > >();
                                    insertedResults.Data =
                                        new List <TransactionResult <Brewery> >();

                                    foreach (var item in contentResponse.Beers.Items)
                                    {
                                        var appBrewery = UntappdToAppAdapter.Get(item.Brewery);
                                        var appBeer    = UntappdToAppAdapter.Get(item.Beer);
                                        appBrewery.Beers.Add(appBeer);

                                        insertedResults.Data.Add(breweryRepo.AddOrUpdate(
                                                                     appBrewery));
                                    }

                                    insertedResults.Success =
                                        insertedResults.Data.All(x => x.Success);

                                    SendResponse(httpListenerContext, insertedResults);
                                    break;
                                }
                            }

                            SendResponse(httpListenerContext,
                                         new TransactionResult <UntappdResponse>
                            {
                                Data    = uResponse,
                                Success = uResponse.Meta.Code == (int)HttpStatusCode.OK
                            });
                            break;
                        }

                        SendResponse(httpListenerContext, clientResults);
                        break;
                    }

                    SendResponse(httpListenerContext, dbResults);

                    break;

                case "help":
                    SendOKResponseAndPayload(httpListenerContext,
                                             JsonConvert.SerializeObject(EndpointDocumentation,
                                                                         Formatting.Indented));
                    break;

                default:
                    ErrorResponse
                    .Get(HttpStatusCode.BadRequest)
                    .Handle(httpListenerContext,
                            $"Bad Request - No '/beer/{route[0]}/...' exists");
                    break;
                }
            }
            catch (Exception e)
            {
                if (e is ArgumentNullException || e is ArgumentException || e is FormatException ||
                    e is OverflowException)
                {
                    ErrorResponse.Get(HttpStatusCode.BadRequest)
                    .Handle(httpListenerContext, "Badly formed Id");
                }
                else
                {
                    ErrorResponse.Get(HttpStatusCode.InternalServerError)
                    .Handle(httpListenerContext,
                            $"Route - '{string.Join("/", route)}'");
                }
            }
        }