Skip to content

Instantly share code, notes, and snippets.

@tsegismont
Created June 5, 2019 13:11
Show Gist options
  • Save tsegismont/62837dd5abaa40a54f3a8f369bd86acd to your computer and use it in GitHub Desktop.
Save tsegismont/62837dd5abaa40a54f3a8f369bd86acd to your computer and use it in GitHub Desktop.
Router router = Router.router(vertx);
router
.get("/beer")
.handler(BodyHandler.create())
.handler(beersHandlers::handleGetBeers);
router
.post("/beer")
.handler(BodyHandler.create())
.handler(beersHandlers::handlePostBeer);
public void handleGetBeers(RoutingContext rc) {
beersCircuitBreaker
.execute(
() -> beersServiceClient
.rxGetBeersList()
.flatMap(res -> res.statusCode() != 200 ? Single.error(new HttpStatusException(500, "Beers service error")) : Single.just(res))
)
.onErrorResumeNext(t -> Single.error(new HttpStatusException(503, "Beers service not available", t)))
.flatMapObservable(httpResponse -> Observable.fromIterable(httpResponse.bodyAsJsonArray()))
.map(o -> new io.slinkydeveloper.brewery.beers.client.models.Beer((JsonObject) o))
.flatMapSingle(this::solveStyleAndBuildApiBeer)
.collectInto(new JsonArray(), (j, apiBeer) -> j.add(apiBeer.toJson()))
.subscribe(
result ->
rc
.response()
.setStatusCode(200)
.putHeader("content-type", "application/json")
.end(result.encode()),
rc::fail
);
}
public void handlePostBeer(RoutingContext rc) {
JsonObject body = rc.getBodyAsJson();
((body.containsKey("style")) ? addBeerAndStyle(body) : addBeer(body))
.subscribe(
result ->
rc
.response()
.setStatusCode(200)
.putHeader("content-type", "application/json")
.end(result.toJson().encode()),
rc::fail
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment