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); } } }
// 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)}'"); } } }